Systems and methods for management of virtualization data

ABSTRACT

Described in detail herein is a method of copying data of one or more virtual machines being hosted by one or more non-virtual machines. The method includes receiving an indication that specifies how to perform a copy of data of one or more virtual machines hosted by one or more virtual machine hosts. The method may include determining whether the one or more virtual machines are managed by a virtual machine manager that manages or facilitates management of the virtual machines. If so, the virtual machine manager is dynamically queried to automatically determine the virtual machines that it manages or that it facilitates management of. If not, a virtual machine host is dynamically queried to automatically determine the virtual machines that it hosts. The data of each virtual machine is then copied according to the specifications of the received indication.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a divisional of U.S. patent application Ser. No.12/553,294 filed Sep. 3, 2009 (entitled SYSTEMS AND METHODS FORMANAGEMENT OF VIRTUALIZATION DATA) which claims priority to U.S.Provisional Patent Application No. 61/094,753 filed Sep. 5, 2008(entitled SYSTEMS AND METHODS FOR MANAGEMENT OF VIRTUALIZATION DATA),U.S. Provisional Patent Application No. 61/121,383 filed Dec. 10, 2008(entitled SYSTEMS AND METHODS FOR MANAGEMENT OF VIRTUALIZATION DATA) andU.S. Provisional Patent Application No. 61/169,515 filed Apr. 15, 2009(entitled SYSTEMS AND METHODS FOR MANAGEMENT OF VIRTUALIZATION DATA),each of which is incorporated by reference herein in its entirety.

BACKGROUND

In general, virtualization refers to the simultaneous hosting of one ormore operating systems on a physical computer. Such virtual operatingsystems and their associated virtual resources are called virtualmachines. Virtualization software sits between the virtual machines andthe hardware of the physical computer. One example of virtualizationsoftware is ESX Server, by VMware, Inc. of Palo Alto, Calif. Otherexamples include Microsoft Virtual Server and Microsoft Windows ServerHyper-V, both by Microsoft Corporation of Redmond, Wash., and Sun xVM bySun Microsystems Inc. of Santa Clara, Calif.

Virtualization software provides to each virtual operating systemvirtual resources, such as a virtual processor, virtual memory, avirtual network device, and a virtual disk. Each virtual machine has oneor more virtual disks. Virtualization software typically stores the dataof virtual disks in files on the filesystem of the physical computer,called virtual machine disk files (in the case of VMware virtualservers) or virtual hard disk image files (in the case of Microsoftvirtual servers). For example, VMware's ESX Server provides the VirtualMachine File System (VMFS) for the storage of virtual machine diskfiles. A virtual machine reads data from and writes data to its virtualdisk much the same way that an actual physical machine reads data fromand writes data to an actual disk.

Traditionally, virtualization software vendors have enabled the backupof virtual machine data in one of two ways. A first method requires theinstallation of backup software on each virtual machine having data tobe backed up and typically uses the same methods used to back up thedata of physical computers to back up the virtual machine data. A secondmethod backs up the files that store the virtual disks of the virtualmachines, and may or may not require the installation of backup softwareon each virtual machine for which the data is to be backed up.

As an example of the second method, VMware Consolidated Backup (VCB),also by VMware, Inc., enables the backup of the data of virtual machineson ESX Server without having to install backup software on the virtualmachines. VCB consists of a set of utilities and scripts that work inconjunction with third-party backup software to backup virtual machinedata. VCB and the third-party backup software are typically installed ona backup proxy server that uses the Microsoft Windows Server 2003operating system by Microsoft Corporation. VCB supports file-levelbackups (backups at the level of files and directories) for virtualmachines using Microsoft Windows operating systems. In a file-levelbackup, the granularity of the backup is at the level of individualfiles and/or directories of the virtual machine. A file-level backupallows copies of individual files on virtual disks to be made.File-level backups can be full backups, differential backups, orincremental backups.

VCB also supports image-level backups for virtual machines using anyoperating system (e.g., Microsoft Windows operating systems, Linuxoperating systems, or other operating systems that may be installed uponESX Server). In an image-level backup, the granularity of the backup isat the level of a virtual machine (i.e., the entire virtual machine,including its current state is backed up). For an image-level backup,typically the virtual machine is suspended and all virtual disk andconfiguration files associated with the virtual machine are backed up,and then the virtual machine is resumed.

An administrator would typically choose to perform a file-level backupof a Microsoft Windows virtual machine because of the potential need torestore individual files or directories from the backed-up Microsoftvirtual machine. However, VCB may not perform a file-level backup of aMicrosoft Windows virtual machine as quickly as an image-level backup.Accordingly, a system that enables a backup of a Microsoft Windowsvirtual machine to be performed at least as quickly as a file-levelbackup and enables granular restoration of any data (e.g., individualfiles or directories) from the backed-up Microsoft virtual machine wouldhave significant utility.

Because VCB only supports file-level backups for virtual machines usingMicrosoft Windows operating systems, a file-level backup cannot beperformed using VCB for virtual machines using operating systems otherthan Microsoft Windows (e.g., Linux operating systems). An administratormust back up a non-Microsoft Windows virtual machine using animage-level backup. Therefore, in order to granularly restore data(e.g., an individual file or directory) from the backed-up non-MicrosoftWindows virtual machine, the entire non-Microsoft Windows virtualmachine must be restored. This may require overwriting the originalvirtual machine with the backed-up virtual machine, or re-creating theoriginal virtual machine on a different physical machine. This may be alaborious and time-intensive process, and may result in loss of virtualmachine data. Accordingly, a system that enables the granularrestoration of any data (e.g., individual files or directories) within avirtual machine using any type of operating system would havesignificant utility.

Another challenge posed by the use of VCB to perform backups of virtualmachines is that such backups require an administrator to manuallyidentify or specify the virtual machines that are to be backed up,typically via a script created in advance of the backup operation.However, because virtual machines may be easily set up and torn down,virtual machines may be less permanent in nature than actual physicalmachines. Due to this potential transience of virtual machines, it maybe more difficult for the administrator to identify all of the virtualmachines which are to be backed up in advance of the backup operation.Accordingly, a system that provides automatic identification of virtualmachines that are to be backed up at the time of the backup operationwould have significant utility.

The need exists for a system that overcomes the above problems, as wellas one that provides additional benefits. Overall, the examples hereinof some prior or related systems and their associated limitations areintended to be illustrative and not exclusive. Other limitations ofexisting or prior systems will become apparent to those of skill in theart upon reading the following Detailed Description.

BRIEF DESCRIPTION OF THE DRAWINGS

FIGS. 1A and 1B are block diagrams illustrating environments in whichaspects of the invention may be configured to operate.

FIG. 2 is a block diagram illustrating another environment in whichaspects of the invention may be configured to operate.

FIG. 3 is a flow diagram illustrating a process for discovering one ormore virtual machines.

FIGS. 4-6 are display diagrams illustrating example interfaces providedby aspects of the invention.

FIG. 7 is a flow diagram illustrating a process for copying virtualmachine data.

FIG. 8 is a flow diagram illustrating a process for extracting metadatafrom virtual volumes and/or virtual disk and configuration files.

FIG. 9 is a flow diagram illustrating a process for restoring virtualmachine data.

FIG. 10 is a block diagram illustrating an example of a data storageenterprise that may employ aspects of the invention.

FIGS. 11-15 are display diagrams illustrating example interfacesprovided by aspects of the invention.

FIG. 16 is a flow diagram illustrating a process for copying virtualmachine data.

FIG. 17 is a diagram illustrating a suitable data structure that may beemployed by aspects of the invention.

DETAILED DESCRIPTION

The headings provided herein are for convenience only and do notnecessarily affect the scope or meaning of the claimed invention.

Overview

Described in detail herein is a method of copying data of one or morevirtual machines being hosted by one or more non-virtual machines. Themethod includes receiving an indication that specifies how to perform acopy of data of one or more virtual machines hosted by one or morevirtual machine hosts. The method further includes determining whetherthe one or more virtual machines are managed by a virtual machinemanager that manages or facilitates management of the virtual machines.If so, the virtual machine manager is dynamically queried toautomatically determine the virtual machines that it manages or that itfacilitates management of. If not, a virtual machine host is dynamicallyqueried to automatically determine the virtual machines that it hosts.The data of each virtual machine is then copied according to thespecifications of the received indication.

Under one example of the method, a file-level, volume-level ordisk-level copy of a virtual machine is performed. Performing afile-level copy involves determining volumes of the virtual machine,mounting the volumes on a proxy server, and copying files from thevolumes mounted on the proxy server to a secondary storage data store.Performing a volume-level copy involves determining volumes of thevirtual machine, mounting the volumes on a proxy server, and copying thevolumes mounted on the proxy server to the secondary storage data store.Performing a disk-level copy involves determining virtual disk andconfiguration files of the virtual machine, copying the virtual disk andconfiguration files to the proxy server, extracting metadata from thevirtual disk and configuration files, and copying the virtual disk andconfiguration files and the extracted metadata to the secondary storagedata store.

Various examples of aspects of the invention will now be described. Thefollowing description provides specific details for a thoroughunderstanding and enabling description of these examples. One skilled inthe relevant art will understand, however, that aspects of the inventionmay be practiced without many of these details. Likewise, one skilled inthe relevant art will also understand that aspects of the invention mayhave many other obvious features not described in detail herein.Additionally, some well-known structures or functions may not be shownor described in detail below, so as to avoid unnecessarily obscuring therelevant description.

The terminology used below is to be interpreted in its broadestreasonable manner, even though it is being used in conjunction with adetailed description of certain specific examples of aspects of theinvention. Indeed, certain terms may even be emphasized below; however,any terminology intended to be interpreted in any restricted manner willbe overtly and specifically defined as such in this Detailed Descriptionsection.

Unless described otherwise below, aspects of the invention may bepracticed with conventional data processing systems. Thus, theconstruction and operation of the various blocks shown in FIGS. 1A, 1Band 2 may be of conventional design, and need not be described infurther detail herein to make and use aspects of the invention, becausesuch blocks will be understood by those skilled in the relevant art. Oneskilled in the relevant art can readily make any modifications necessaryto the blocks in FIGS. 1A, 1B and 2 (or other embodiments or figures)based on the detailed description provided herein.

Aspects of the invention will now be described in detail with respect toFIGS. 1 through 17. FIGS. 1A, 1B and 2 are block diagrams illustratingvarious environments in which aspects of the invention may be configuredto operate. FIG. 1A illustrates aspects of the invention interactingwith virtual machines (e.g., VMware virtual machines or Microsoftvirtual machines) storing data on a storage device connected to thevirtual machine via a Storage Area Network (SAN), and FIG. 1Billustrates aspects of the invention interacting with virtual machinesstoring data locally. FIG. 2 illustrates aspects of the inventioninteracting with a virtual machine manager (e.g., a VMware VirtualCenter server or a Microsoft System Center Virtual Machine Manager),which manages virtual machines. FIG. 3 is a flow diagram illustrating aprocess for discovering one or more virtual machines in one or more ofthe environments illustrated in FIGS. 1A, 1B and 2 (or in otherenvironments).

FIGS. 4-6 are display diagrams illustrating example interfaces providedby aspects of the invention. An administrator (or other user) may usethe example interfaces to administer storage operations, such as thecopying of data of virtual machines. FIG. 7 is a flow diagramillustrating a process used by aspects of the invention to copy data ofa virtual machine. FIG. 8 is a flow diagram illustrating a process forextracting metadata from virtual volumes and/or virtual disk andconfiguration files. FIG. 9 is a flow diagram illustrating a process forrestoring virtual machine data. FIG. 10 is a block diagram illustratingan example of a data storage enterprise in which aspects of theinvention may be configured to operate.

FIGS. 11, 12, 13A, 13B, 14A, and 14B are display diagrams illustratingexample interfaces provided by aspects of the invention. Theadministrator may also use these example interfaces to administerstorage operations, such as the restoration of data previously copiedfrom virtual machines. FIG. 16 is a flow diagram illustrating a processthat may be used in a storage operation to perform incremental copies ofblocks of virtual machine data. FIG. 17 is a diagram illustrating asuitable data structure that may be used during the process of FIG. 16.

Suitable Environments

FIGS. 1A, 1B and 2 and the discussion herein provide a brief, generaldescription of certain exemplary suitable computing environments inwhich aspects of the invention can be implemented. Although notrequired, aspects of the invention are described in the general contextof computer-executable instructions, such as routines executed by ageneral-purpose computer, e.g., a server computer, wireless device, orpersonal computer. Those skilled in the relevant art will appreciatethat aspects of the invention can be practiced with othercommunications, data processing, or computer system configurations,including: Internet appliances, hand-held devices (including personaldigital assistants (PDAs)), wearable computers, all manner of wirelessdevices, multi-processor systems, microprocessor-based or programmableconsumer electronics, set-top boxes, network PCs, mini-computers,mainframe computers, and the like. Indeed, the terms “computer,” “host,”and “host computer” are generally used interchangeably herein, and referto any of the above or similar devices and systems, as well as any dataprocessor.

Aspects of the invention can be embodied in a special purpose computeror data processor that is specifically programmed, configured, orconstructed to perform one or more of the computer-executableinstructions explained in detail herein. Aspects of the invention canalso be practiced in distributed computing environments where tasks ormodules are performed by remote processing devices, which are linkedthrough a communications network, such as a Local Area Network (LAN), aWide Area Network (WAN), a SAN, a Fibre Channel network, or theInternet. In a distributed computing environment, program modules may belocated in both local and remote memory storage devices.

Aspects of the invention may be stored or distributed on tangiblecomputer-readable media, including magnetically or optically readablecomputer discs, hard-wired or preprogrammed chips (e.g., EEPROMsemiconductor chips), nanotechnology memory, biological memory, or othertangible or physical data storage media. In some aspects of the system,computer implemented instructions, data structures, screen displays, andother data under aspects of the invention may be distributed over theInternet or over other networks (including wireless networks), on apropagated signal on a propagation medium (e.g., an electromagneticwave(s), a sound wave, etc.) over a period of time, or they may beprovided on any analog or digital network (packet switched, circuitswitched, or other scheme). Those skilled in the relevant art willrecognize that portions of aspects of the invention may reside on aserver computer, while corresponding portions reside on a clientcomputer such as a mobile or portable device, and thus, while certainhardware platforms are described herein, aspects of the invention areequally applicable to nodes on a network.

FIG. 1A is a block diagram illustrating an environment 100 in whichaspects of the invention may be configured to operate. The environment100 includes a virtual machine host 105 operating on or being hosted bya computing device 125, which may be a server. The environment 100 alsoincludes a primary storage data store 135 connected to the computingdevice 125 via a SAN 130. The environment 100 also includes a virtualmachine storage manager 145 operating on or being hosted by anothercomputing device 170, which may be another server, and a secondarystorage data store 175 connected to the computing device 170. Thecomputing devices 125 and 170 are connected to each other via a network180, which may be a LAN, a WAN, the public Internet, some other type ofnetwork, or some combination of the above.

The virtual machine host 105 hosts one or more virtual machines 110(shown individually as virtual machines 110 a and 110 b). Each virtualmachine 110 has its own operating system 120 (shown individually asoperating systems 120 a and 120 b) and one or more applications 115executing on the operating system or loaded on the operating system(shown individually as applications 115 a and 115 b). The operatingsystems 120 may be any type of operating system 120 (e.g., MicrosoftWindows 95/98/NT/2000/XP/2003/2008, Linux operating systems, Sun Solarisoperating systems, UNIX operating systems, etc.) that can be hosted bythe virtual machine host 105. The applications 115 may be anyapplications (e.g., database applications, file server applications mailserver applications, web server applications, transaction processingapplications, etc.) that may run on the operating systems 120. Thevirtual machines 110 are also connected to the network 180.

The computing device 125 is connected to the primary storage data store135 via the SAN 130, which may be any type of SAN (e.g., a Fibre ChannelSAN, an iSCSI SAN, or any other type of SAN). The primary storage datastore 135 stores the virtual disks 140 (shown individually as virtualdisks 140 a and 140 b) of the virtual machines 110 hosted by the virtualmachine host 105. Virtual disk 140 a is used by virtual machine 110 a,and virtual disk 140 b is used by virtual machine 110 b. Although eachvirtual machine 110 is shown with only one virtual disk 140, eachvirtual machine 110 may have more than one virtual disk 140 in theprimary storage data store 135. As described in more detail herein, avirtual disk 140 corresponds to one or more files (e.g., one or more*.vmdk or *.vhd files) on the primary storage data store 135. Theprimary storage data store 135 stores a primary copy of the data of thevirtual machines 110. Additionally or alternatively, the virtual disks140 may be stored by other storage devices in the environment 100.

A primary copy of data generally includes a production copy or other“live” version of the data that is used by a software application and isgenerally in the native format of that application. Primary copy datamay be maintained in a local memory or other high-speed storage device(e.g., on the virtual disks 140 located in the primary storage datastore 135) that allows for relatively fast data access if necessary.Such primary copy data may be intended for short-term retention (e.g.,several hours or days) before some or all of the data is stored as oneor more secondary copies, for example, to prevent loss of data in theevent a problem occurs with the data stored in primary storage.

In contrast, secondary copies include point-in-time data and aretypically intended for long-term retention (e.g., weeks, months, oryears depending on retention criteria, for example, as specified in astorage or retention policy) before some or all of the data is moved toother storage or discarded. Secondary copies may be indexed so users canbrowse and restore the data at another point in time. After certainprimary copy data is backed up, a pointer or other location indicia,such as a stub, may be placed in the primary copy to indicate thecurrent location of that data. The secondary storage data store 175stores one or more secondary copies of the data of the virtual machines110.

The virtual machine storage manager 145 includes a virtual machinestorage operation component 150, which includes a Virtual Logical UnitNumber (VLUN) driver 152 (for accessing virtual disks 140, described inmore detail herein) and a virtual machine mount component 154 (formounting virtual machines, described in more detail herein). The virtualmachine storage manager 145 also includes a data agent 155. The dataagent 155 includes an integration component 157 that providesfunctionality for the virtual machine storage operation component 150.The data agent 155 also includes a virtual disk analyzer component 160that examines the virtual disk and configuration files corresponding tothe virtual disks 140 and extracts metadata from the virtual disk andconfiguration files. For example, the integration component 157 mayinclude a set of scripts that the data agent 155 causes to be run priorto, during, and/or following a copy of virtual machine data. As anotherexample, the integration component 157 may be a component thatencapsulates or wraps the virtual machine mount component 154 andprovides an Application Programming Interface (API) with functions foraccessing the virtual machine mount component 154. The virtual machinestorage manager 145 also includes a data store 165 that maintains dataused by the virtual machine storage manager 145, such as data usedduring storage operations, and configuration data.

The secondary storage data store 175 is connected to the computingdevice 170. The secondary storage data store 175 may be any type ofstorage suitable for storing one or more secondary copies of data, suchas Directly-Attached Storage (DAS) such as hard disks, storage devicesconnected via another SAN (e.g., a Fibre Channel SAN, an iSCSI SAN, orany other type of SAN), Network-Attached Storage (NAS), a tape library,optical storage, or any other type of storage. The secondary storagedata store 175 stores virtual machine data that is copied by the virtualmachine storage manager 145. Accordingly, the secondary storage datastore 175 stores one or more secondary copies, of the data of thevirtual machines 110. A secondary copy can be in one or more variousformats (e.g., a copy set, a backup set, an archival set, a migrationset, etc.).

FIG. 1B is a block diagram illustrating another environment 101 in whichaspects of the invention may be configured to operate. The environment101 is substantially the same as the environment 100 illustrated in FIG.1A, except that primary storage data store 135 resides in the computingdevice 125 hosting the virtual machine host 105 (the primary storagedata store 135 is local storage). The local primary storage data store135 includes a virtual disk 140 a for use by virtual machine 110 a, anda virtual disk 140 b for use by virtual machine 110 b. In addition to oras an alternative to the primary storage data stores 135 illustrated inFIGS. 1A and 1B, the virtual machine host 105 may use other methods ofstoring data, such as Raw Device Mapping (RDM) on a local ornetwork-attached device (NAS) or on storage devices connected viaanother SAN.

FIG. 2 is a block diagram illustrating yet another environment 200 inwhich aspects of the invention may be configured to operate. Theenvironment 200 includes two computing devices 125 (shown individuallyas computing devices 125 a and 125 b), each hosting a virtual machinehost 105 (shown individually as virtual machine hosts 105 a and 105 b).The primary storage data store 135 includes two additional virtual disks140 c and 140 d that store the data of virtual machines 110 c and 110 d,respectively.

The environment 200 also includes a virtual machine manager 202operating on a computing device 215 (e.g., a server). The virtualmachine manager 202 includes a virtual machine management component 205which enables administrators (or other users with the appropriatepermissions; the term administrator is used herein for brevity) tomanage the virtual machines 110. The virtual machine manager 202 alsoincludes an Application Programming Interface (API) component 210, whichprovides functions that enable the data agent 155 to programmaticallyinteract with the virtual machine manager 202 and the virtual machines110. The virtual machine hosts 105 may also each include an APIcomponent. The virtual machine manager 202 and/or the virtual machinehosts 105 may expose or provide other APIs not illustrated in FIG. 1A,1B or 2, such as an API for accessing and manipulating virtual disks140, and APIs for performing other functions related to management ofvirtual machines 110.

The environments 100, 101 and 200 may include components other thanthose illustrated in FIGS. 1A, 1B and 2, respectively, and thecomponents illustrated may perform functions other than or in additionto those described herein. For example, the virtual machine storagemanager 145 may include a public key certificate (e.g., an X.509 publickey certificate) that the virtual machine storage manager 145 providesto the virtual machine host 105 or the virtual machine manager 202. Thevirtual machine host 105 or the virtual machine manager 202 can then usethe X.509 public key of the certificate to encrypt data that is to betransmitted to the virtual machine storage manager 145. As anotherexample, the network 180 may include a firewall that sits between thevirtual machine host 105 and the virtual machine storage manager 145,and data being copied may have to pass through the firewall. If this isthe case, the virtual machine storage manager 145 may use the systemsand methods described in commonly-assigned U.S. patent application Ser.No. 10/818,747 (entitled SYSTEM AND METHOD FOR PERFORMING STORAGEOPERATIONS THROUGH A FIREWALL), the entirety of which is incorporated byreference herein.

As another example, a secondary storage computing device (which isdescribed in more detail herein, e.g., with reference to FIG. 10) may beconnected to the virtual machine storage manager 145 and to thesecondary storage data store 175. The secondary storage computing devicemay assist in the transfer of copy data from the virtual machine storagemanager 145 to the secondary storage data store 175. The secondarystorage computing device may perform functions such as encrypting,compressing, single or variable instancing, and/or indexing data that istransferred to the secondary storage data store 175. As another example,one or more agents (e.g., a file system agent and/or a proxy host agent)as well as a set of utilities (e.g., VMware Tools if the virtualmachines 110 are VMware virtual machines) may reside on each virtualmachine 110 to provide functionality associated with copying andrestoring virtual machine data. As another example, the environments100, 101 and 200 may include components or agents that perform variousfunctions on virtual machine and other data, such as classifying data,indexing data, and single or variable instancing or deduplicating dataat different phases of storage operations performed on virtual machineand other data.

As another example, the secondary storage data store 175 may include oneor more single instance storage devices that store only a singleinstance of multiple instances of data (e.g., only a single instance ofmultiple instances of identical files or data objects stored on one ormore computing devices). If this is the case, the secondary storage datastore 175 may include one or more single instance storage devices asdescribed in one or more of the following commonly-assigned U.S. patentapplications: 1) U.S. patent application Ser. No. 11/269,512 (entitledSYSTEM AND METHOD TO SUPPORT SINGLE INSTANCE STORAGE OPERATIONS); 2)U.S. patent application Ser. No. 12/145,347 (entitled APPLICATION-AWAREAND REMOTE SINGLE INSTANCE DATA MANAGEMENT); or 3) U.S. patentapplication Ser. No. 12/145,342 (entitled APPLICATION-AWARE AND REMOTESINGLE INSTANCE DATA MANAGEMENT), 4) U.S. patent application Ser. No.11/963,623 (entitled SYSTEM AND METHOD FOR STORING REDUNDANTINFORMATION); 5) U.S. patent application Ser. No. 11/950,376 (entitledSYSTEMS AND METHODS FOR CREATING COPIES OF DATA SUCH AS ARCHIVE COPIES);or 6) U.S. Pat. App. No. 61/100,686 (entitled SYSTEMS AND METHODS FORMANAGING SINGLE INSTANCING DATA), each of which is incorporated byreference herein in its entirety.

As a further example, the secondary storage data store 175 may includeone or more variable instance storage devices that store a variablenumber of instances of data (e.g., a variable number of instances ofidentical files or data objects stored on one or more computingdevices). If this is the case, the secondary storage data store 175 mayinclude one or more variable instance storage devices as described inthe following commonly-assigned U.S. Pat. App. No. 61/164,803 (entitledSTORING A VARIABLE NUMBER OF INSTANCES OF DATA OBJECTS).

Example Layouts of Virtual Disks

Virtual disks 140, as used in the systems described in FIGS. 1A, 1B and2, may have various configurations. As previously described, a virtualdisk 140 corresponds to one or more virtual disk files (e.g., one ormore *.vmdk or *.vhd files) on the primary storage datastore 135. Avirtual machine host 105 may support several types of virtual disks 140.For example, a virtual disk 140 may be either: 1) a growable virtualdisk 140 contained in a single virtual disk file that can grow in size(e.g., a monolithic sparse virtual disk that starts at 2 GB and growslarger); 2) a growable virtual disk 140 split into multiple virtual diskfiles (e.g., a split sparse virtual disk comprising multiple 2 GBvirtual disk files), the aggregation of which can grow in size by addingnew virtual disk files; 3) a preallocated virtual disk 140 contained ina single virtual disk file (e.g., a monolithic flat virtual disk, thesize of which does not change); or 4) a preallocated virtual disk 140split into multiple virtual disk files (e.g., a split flat virtual diskcomprising multiple 2 GB virtual disk files, the number of which and thesize of each of which does not change). Where a virtual disk 140 issplit into multiple virtual disk files, each individual virtual diskfile is called an extent. A virtual machine host 105 may also supporttypes of virtual disks 140 other than these types. Those of skill in theart will understand that a virtual disk 140 can be structured in a widevariety of configurations, and that virtual disks 140 are not limited tothe configurations described herein.

A virtual machine host 105 may support snapshotting, or taking asnapshot of a virtual machine 110. The virtual machine host 105 cansnapshot a virtual machine 110 in a linear fashion (in which there isonly one branch of snapshots from the original state of the virtualmachine 110, and each snapshot in the branch linearly progresses fromprior snapshots) or in a process tree (in which there are multiplebranches of snapshots from the original state of the virtual machine110, and two snapshots may or may not be in the same branch from theoriginal state of the virtual machine 110). When a snapshot is taken ofa virtual machine 110, the virtual machine 110 stops writing to itsvirtual disks 140 (e.g., stops writing to the one or more *.vmdk files).The virtual machine 110 writes future writes to a delta disk file (e.g.,a *delta.vmdk file) using, for example, a copy-on-write (COW) semantic.As the virtual machine host 105 can snapshot a virtual machine 110repeatedly, there can be multiple delta disk files. The virtual disk anddelta disk files can be analogized to links in a chain. Using thisanalogy, the original disk file is a first link in the chain. A firstchild delta disk file is a second link in the chain, and a second childdelta disk file is a third link in the chain, and so forth.

Also as previously described, a virtual machine 110 generally hasassociated configuration files that a virtual machine host 105 uses tostore configuration data about the virtual machine 110. Theseconfiguration files may include a *.vmx file, which stores data aboutthe parent-child relationships created between virtual disk files anddelta disk files when a snapshot of a virtual machine 110 is taken.These configuration files may also include a disk descriptor file (e.g.,a *.vmdk file). In some embodiments, instead of using a disk descriptorfile, the disk descriptor is embedded into a virtual disk file (e.g.,embedded in a *.vmdk file).

The disk descriptor file generally stores data about the virtual diskfiles that make up a virtual disk 140. This data includes informationabout the type of the virtual disk 140. For example, the virtual disk140 may be a monolithic flat virtual disk, a monolithic sparse virtualdisk, a split flat virtual disk, a split sparse virtual disk or anothertype of a virtual disk. This data also includes an identifier of theparent of the virtual disk file, if it has one (if the virtual machine110 has been snapshotted, its original virtual disk file will have achild virtual disk file), a disk database describing geometry values forthe virtual disk 140 (e.g., cylinders, heads and sectors) andinformation describing the extents that make up the virtual disk 140.Each extent may be described by a line in the disk descriptor filehaving the following format:

[type of access] [size] [type] [file name of extent]

Following is an example of a line in the disk descriptor file describingan extent:

RW 16777216 VMFS “test-flat.vmdk”

This line describes an extent for which read/write access is allowed, ofsize 16777216 sectors, of type VMFS (e.g., for use on a primary storagedata store 135), and the filename of the virtual diskfile—“test-flat.vmdk.”

A virtual machine host 105 provides an abstraction layer such that theone or more virtual disks files (and any delta disk files) of thevirtual disks 140 appear as one or more actual disks (e.g., one or morehard disk drives) to a virtual machine 110. Because the virtual machinehost 105 abstracts the virtual disk 140 so that it appears as an actualdisk to an operating system 120 executing on the virtual machine 110,the operating system 120 can generally use its standard file system forstoring data on a virtual disk 140. The various structures used by thefile system and the operating system 120 (e.g., the partition table(s),the volume manager database(s) and the file allocation table(s)) arestored in the one or more virtual disk files that make up a virtual disk140.

For example, a virtual machine host 105 may store a single virtual diskfile (e.g., a single *.vmdk file) that is a preallocated virtual disk140 (a monolithic flat virtual disk) for each virtual disk used by avirtual machine 110 operating on the virtual machine host 105. Thesingle virtual disk file may be named <virtual machine name>-flat.vmdk.There would also be a disk descriptor file for the single virtual diskfile that would typically be named <virtual machine name>-.vmdk. Asnapshot taken of the virtual machine 110 would result in an additionaldelta disk file being created that is a single virtual disk file (e.g.,a single *.vmdk file), which is a growable virtual disk 140 (amonolithic sparse virtual disk). The delta disk file would typically benamed <virtual disk name>-<######>-delta.vmdk, where <######> is anumber indicating the sequence of the snapshot. There would also be adisk descriptor file for the single virtual disk file that wouldtypically be named <virtual disk name>-<######>-.vmdk, again, where<######> is a number indicating the sequence of the snapshot.

Process for Discovering Virtual Machines

FIG. 3 is a flow diagram illustrating a process for discovering one ormore virtual machines 110 (e.g., for an operation to copy their data).In general, for ease in describing features of the invention, aspects ofthe invention will now be described in terms of a user (e.g., anadministrator) interacting with the server computer via his or her usercomputer. As implemented, however, the user computer receives data inputby the user and transmits such input data to the server computer. Theserver computer then queries the database, retrieves requested pages,performs computations and/or provides output data back to the usercomputer, typically for visual display to the user. Thus, for example,under step 305, a user provides input specifying that a copy operationis to be performed and how to perform the copy operation. The data agent155 receives this input and performs the copy operation according to theinput.

The process 300 begins at step 305 when the data agent 155 receives anindication specifying that the data agent 155 is to perform a copyoperation and how to perform the copy operation. The indication may bereceived from the administrator (e.g., a manually-specified indicationto perform a copy operation) or be triggered automatically (e.g., by anautomated schedule). The indication may be received as a result of astorage policy that specifies how and/or when to copy data from one ormore virtual machines 110 to the secondary storage data store 175.

A storage policy is generally a data structure or other informationsource that includes a set of preferences and other storage criteriaassociated with performing a storage operation. The preferences andstorage criteria may include, but are not limited to, a storagelocation, relationships between system components, network pathways toutilize in a storage operation, retention policies, datacharacteristics, compression or encryption requirements, preferredsystem components to utilize in a storage operation, a single-instancingor variable instancing policy to apply to the data, and other criteriarelating to a storage operation. For example, a storage policy mayindicate that certain data is to be stored in the secondary storage datastore 175, retained for a specified period of time before being aged toanother tier of secondary storage, copied to the secondary storage datastore 175 using a specified number of data streams, etc. A storagepolicy may be stored in a database of a storage manager (see, e.g., FIG.10 and accompanying description), to archive media as metadata for usein restore operations or other storage operations, or to other locationsor components of the system. The storage manager may include a jobsagent that monitors the status of some or all storage operationspreviously performed, currently being performed, or scheduled to beperformed.

For example, an administrator may create a storage policy for copyingdata of virtual machines 110 and perform the copying of their data tothe secondary storage data store 175 according to the storage policy.This storage policy may specify that the virtual machine storage manager145 is to perform a file-level copy of certain files (e.g., all files ina specific directory or satisfying selection criteria) on multiplevirtual machines 110. As yet another example, the storage policy mayspecify that the virtual machine storage manager 145 is to perform avolume-level copy of all virtual machines 110 on multiple virtualmachine hosts 105. As another example, the storage policy may specifythat the virtual machine storage manager 145 is to perform a disk-levelcopy of all virtual machines 110 on all virtual machine hosts 105associated with a virtual machine manager 202. File-level, volume-leveland disk-level copying is discussed in more detail herein, for example,with reference to FIG. 7.

At decision step 310 the data agent 155 determines (e.g., by reading astored indication of the virtual machine manager 202, or by scanning anetwork for a virtual machine manager 202) whether there is a virtualmachine manager 202 managing the virtual machine hosts 105 andassociated virtual machines 110. If there is a virtual machine manager202, the process 300 continues at step 325, where the data agent 155queries the virtual machine manager 202 to determine the virtualmachines 110 that it manages and to receive an ordered or unordered listof virtual machines 110. The data agent 155 may call a function of theAPI component 210 to determine the virtual machines 110 managed by thevirtual machine manager 202 and receive an ordered or unordered list ofvirtual machines 110.

If there is not a virtual machine manager 202, the process 300 continuesat step 315, where the data agent 155 selects the next virtual machinehost 105, which, on the first loop, is the first determined virtualmachine host 105. The virtual machine hosts 105 may be dynamicallydetermined (e.g., by scanning the network 180) or determined statically(e.g., by reading a stored indication of the virtual machine hosts 105).More details as to the detection of virtual machine hosts 105 andvirtual machines 110 are described herein for example, with reference toFIGS. 4-6. The steps 325 and 320 are not to be understood as mutuallyexclusive. For example, the data agent 155 may determine a first set ofvirtual machines 110 by accessing the virtual machine manager 202, and asecond set of virtual machines by accessing one or more virtual machinehosts 105.

At step 320 the data agent 155 queries the virtual machine host 105 todetermine the virtual machines 110 that it hosts. The data agent 155 maycall a function of the API component 210 to determine the virtualmachines 110 hosted by the virtual machine host 105 and to receive anordered or unordered list of virtual machines 110. At step 330, the dataagent 155 begins looping through the list of virtual machines 110 thatit determined in either or both of steps 320 or 325 and selects the nextvirtual machine 110 on the list, which, on the first loop, is the firstdetermined virtual machine 110. At step 335 the data agent 155 copiesthe data of the virtual machine, for example, according to theindication received in step 305, or according to a storage policy. Thisprocess is described in more detail herein, for example, with referenceto FIG. 7.

At step 337, other processing of virtual machine data may be performed.For example, the data agent 155 (or another agent, such as a dataclassification agent) may analyze and classify the virtual machine data.To do so, the data agent 155 may use techniques such as those describedin commonly assigned U.S. patent application Ser. No. 11/564,119(entitled SYSTEMS AND METHODS FOR CLASSIFYING AND TRANSFERRINGINFORMATION IN A STORAGE NETWORK), the entirety of which is incorporatedby reference herein. As another example, the data agent 155 (or anotheragent, such as an indexing agent) may create an index of the virtualmachine data. To do so, the data agent 155 may use techniques such asthose described in commonly-assigned U.S. patent application Ser. No.11/694,869 (entitled METHOD AND SYSTEM FOR OFFLINE INDEXING OF CONTENTAND CLASSIFYING STORED DATA), the entirety of which is incorporatedherein. As a final example, the data agent 155 may single or variableinstance or de-duplicate the virtual machine data. To do so, the dataagent 155 may use techniques described in one or more ofpreviously-referenced U.S. patent application Ser. Nos. 11/269,512,12/145,347, 12/145,342, 11/963,623, 11/950,376, 61/100,686, and61,164,803. At decision step 340, the data agent 155 determines whetherthere are more virtual machines 110 for which the data is to be copied.If so, the data agent 155 returns to step 330, where the next virtualmachine 110 is selected.

If there are no more virtual machines 110 for which the data is to becopied (e.g., if the data agent 155 has looped through the list of allthe virtual machines 110 determined in either or both of steps 320 or325), the process continues at step 345. At decision step 345, if thereis not a virtual machine manager 202 (e.g., as determined in decisionstep 310), the data agent 155 determines whether there are more virtualmachine hosts 105 (e.g., if more than one virtual machine hosts 105 wasspecified in the indication received in step 305). If there are morevirtual machine hosts 105, the data agent 155 returns to step 315. Ifnot, the process 300 concludes.

Interfaces for Configuring Storage Operations for Virtual Machine Data

Referring to FIGS. 4 through 6, representative computer displays or webpages for configuring storage operations to be performed for virtualmachine data will now be described. The screens of FIGS. 4 through 6 maybe implemented in any of various ways, such as in C++ or as web pages inXML (Extensible Markup Language), HTML (Hyper Text Markup Language), orany other scripts or methods of creating displayable data, such as theWireless Access Protocol (“WAP”). The screens or web pages providefacilities to present information and receive input data, such as a formor page with fields to be filled in, pull-down menus or entries allowingone or more of several options to be selected, buttons, sliders,hypertext links or other known user interface tools for receiving userinput. While certain ways of displaying information to users is shownand described with respect to certain Figures, those skilled in therelevant art will recognize that various other alternatives may beemployed. The terms “screen,” “web page” and “page” are generally usedinterchangeably herein.

When implemented as web pages, the screens are stored as displaydescriptions, graphical user interfaces, or other methods of depictinginformation on a computer screen (e.g., commands, links, fonts, colors,layout, sizes and relative positions, and the like), where the layoutand information or content to be displayed on the page is stored in adatabase typically connected to a server. In general, a “link” refers toany resource locator identifying a resource on a network, such as adisplay description provided by an organization having a site or node onthe network. A “display description,” as generally used herein, refersto any method of automatically displaying information on a computerscreen in any of the above-noted formats, as well as other formats, suchas email or character/code-based formats, algorithm-based formats (e.g.,vector generated), or matrix or bit-mapped formats. While aspects of theinvention are described herein using a networked environment, some orall features may be implemented within a single-computer environment.

FIG. 4 is a display diagram illustrating an example interface 400provided by aspects of the invention. The interface 400 enables anadministrator to specify options for the data agent 155 to discovervirtual machines 110 for purposes of adding them to a sub-client.Clients and sub-clients are discussed in more detail with respect toFIGS. 5A and 5B. The administrator can specify that the data agent 155is to automatically discover virtual machines 110 by selecting check box405, which enables two options. The first option, which can be chosen byselecting radio button 410 a and using the button 415 a labeled“Configure,” specifies that the data agent 155 is to discover virtualmachine hosts 105 or virtual machines 110 that match a regularexpression (e.g., an expression that describes a set of strings). Thesecond option, which can be chosen by selecting radio button 410 b andusing the button 415 b labeled “Configure,” specifies that the dataagent 155 is to discover virtual machines 110 associated with one ormore specified virtual machine hosts 105. The two options allow theadministrator to specify one or more criteria (e.g., based on names ofthe virtual machines 110) that discovered virtual machine 110 shouldmeet in order to be associated with a storage policy, and this to havestorage operations performed upon their data. Additionally oralternatively, data of virtual machines 110 can be classified orcategorized (e.g., using techniques described in the previouslyreferenced U.S. patent application Ser. No. 11/564,119) and the one ormore criteria can use these classifications or categorizations. Detectedvirtual machines 110 that meet these one or more criteria (or havingdata that meets these one or more criteria) can be associated with astorage policy. This allows storage operations to be performed upontheir data.

Buttons 418 enable the administrator to confirm or cancel the selectionsand/or view help regarding the interface 400. The interface 400 mayenable discovery of virtual machines 110 by both regular expressionmatching and by association with one or more specified virtual machinehosts 105. For example, the interface 400 could be configured todiscover all virtual machines 110 associated with a specific virtualmachine host 105, as well as an additional number of virtual machines110 having names that match a regular expression (e.g., “virtual/A”).

FIG. 5A is a display diagram illustrating another example interface 500provided by aspects of the invention. Tab 510 specifies general optionsthat may be configurable by an administrator. Tab 510 also specifies avirtual machine storage manager 145, name 512, an application 514, aninstance name 516, and a backup set name 518. The name 512 correspondsto the virtual machine storage manager 145 that hosts the data agent155. The administrator can establish one or more sub-clients for thevirtual machine storage manager 145. A sub-client is a portion of aclient, and can contain either all of the client's data or a designatedsubset thereof. A default sub-client may be established for the dataagent 155 that provides for protection of substantially all of theclient's data (e.g., the data of the virtual machines 110). Protectionof data generally refers to performing a storage operation on a primarycopy of data to produce one or more secondary copies of the data.Storage operations performed to protect data may include copyoperations, backup operations, snapshot operations, Hierarchical StorageManagement (HSM) operations, migration operations, archive operations,and other types of storage operations known to those of skill in theart.

An administrator can also establish additional sub-clients to provide afurther level of protection of virtual machine data. For example, for avirtual machine 110 upon which is loaded a mail application (e.g., aMicrosoft Exchange mail server) and a database application (e.g., anOracle database application), the administrator could establish onesub-client for protection of the data of the mail application (e.g.,user mailboxes) and one sub-client for protection of the data of thedatabase application (e.g., databases, datafiles and/or tablespaces). Asanother example, the administrator could establish sub-clients fororganizational groupings (e.g., a sub-client for a marketing group, asub-client for a sales group, etc.) and/or for virtual machines 110based upon their purpose (e.g., a sub-client for virtual machines 110used in production settings, a sub-client for virtual machines 110 usedin test and/or development settings, etc.). Those of skill in the artwill understand that an administrator may establish sub-clientsaccording to various groupings.

An administrator can specify that any newly discovered virtual machines110 that do not qualify for membership in an established sub-clientgroup are to be added to the default sub-client by selecting check box520. The administrator can also select that the data agent 155 is todiscover virtual machines 110 and add them to particular sub-clientsbased upon rules by selecting check box 522. Since check box 522 is notselected, the options below it may not be selectable. However, selectingcheck box 522 allows the administrator to select radio buttons 524(shown individually as radio buttons 524 a and 524 b) and buttons 526(shown individually as buttons 526 a and 526 b), which enablefunctionality similar to that discussed with reference to the interface400 of FIG. 4. For example, selection of the radio button 524 a and thebutton 526 a can enable the administrator to specify that all virtualmachines 110 that match a regular expression (e.g., the regularexpression “^[a−g]” could be used to match any virtual machines 110 (orany virtual machine hosts 105) beginning with names for which the firstcharacter begins with any character in the range of “a” to “g”), are tobe added to a particular sub-client. As another example, selection ofthe radio button 524 b and the button 526 b can enable the administratorto specify that all virtual machines 110 that are associated with aparticular virtual machine host 105 (that is identified by e.g., name,IP address, and/or other identifier) are to be added to a particularsub-client. Buttons 528 enable the administrator to confirm or cancelthe selections and/or view help regarding the interface 500.

FIG. 5B is a display diagram illustrating another example interface 550provided by aspects of the invention that is shown when tab 530 isselected. Tab 530 specifies the configurations of virtual machine hosts105, virtual machines 110, and sub-clients. The tab 530 displays threecolumns, column 542, labeled “Virtual machine host,” column 544, labeled“Virtual machine,” and column 546, labeled “Sub-client name.” Column 542contains a listing of discovered virtual machine hosts 105. Column 544contains a listing of discovered virtual machines 110, grouped by theirassociated virtual machine hosts 105. Column 546 contains a listing ofsub-client names that are associated with each virtual machine 110. Thevirtual machine hosts 105 are divided into three groups 560, 562, and564. Several of the virtual machines 110 hosted by the first group ofvirtual machines servers 105 have sub-client names of “Sub-client_test,”indicating that they are part of this sub-client. The last virtualmachine 110 in group 560 displays a list box 570 listing three differentsub-clients that may be selected for the virtual machine 110 named“rack0102rh4×64.” The virtual machine 110 is currently part of thesub-client “Sub-client_test,” but other sub-clients may be selected. Thevirtual machines 110 that are part of the same sub-client have the samestorage policy applied to protect their data.

Other virtual machines 110 that are part of the groups 562 or 564 areshown as being part of other sub-clients, such as the virtual machine110 named “VM2” that is part of a sub-client 572 named “Database_SC,”which may be a sub-client directed toward protecting data of a databaseapplication, and the virtual machine 110 named “VM3” that is part of asub-client 574 named “Filesrv_SC,” which may be a sub-client directedtoward protecting data on a file server. Similarly, the virtual machines110 named “SG111” and “SG3(1)” are both part of a sub-client 576 named“Marketing_Sales_SC,” which may be a sub-client directed towardprotecting data of marketing and sales organizations. The virtualmachine 110 named “W2K8_SC” is also part of the sub-client 574.Accordingly, two different virtual machines 110 on two different virtualmachine hosts 105 may be part of the same sub-client.

The sub-client 574 may also include other, non-virtual machines.(Non-virtual machines can be defined broadly to include operatingsystems on computing devices that are not virtualized. For example, theoperating systems of the virtual machine hosts 105, the virtual machinemanager 202, and the virtual machine storage manager 145 can beconsidered to be non-virtual machines.) In this case, the same storagepolicy would be applied to protect data of both the associated virtualmachines 115 and the non-virtual machines. An administrator can selectone or more virtual machine hosts 105 and select a sub-client using thelistbox 554, and then select the button 556 labeled “Apply” to changeall of the selected virtual machine hosts 105 to a selected sub-client.When the administrator selects the button 552 labeled “Discover,” anautomated process for discovering virtual machine hosts 105 and/orvirtual machines 110 is started. When it concludes, the interface 550displays any virtual machine hosts 105 and/or virtual machines 110discovered by the process. Buttons 578 enable the administrator toconfirm or cancel the selections and/or view help regarding theinterface 550.

FIG. 6 is a display diagram illustrating another example interface 600provided by aspects of the invention. The interface 600 enables theadministrator to specify virtual machine hosts 105 and/or virtualmachines 110 and security credentials for the data agent 155 to use whenaccessing the virtual machines 110. For example, the virtual machinehosts 105 and/or the virtual machines 110 may use well-knownauthentication and authorization technicians (e.g., username andpassword, and/or access control lists (ACLs)) to control access tovirtual machine data. The interface 600 includes a region 610 in which alisting of virtual machine hosts 105 and/or virtual machines 110 can beshown. The administrator can add, edit and/or remove virtual machinehosts 105 and/or virtual machines 110 by selecting buttons 612, 614and/or 616, respectively. Buttons 618 enable the administrator toconfirm or cancel the selections and/or view help regarding theinterface 600.

Process for Copying Virtual Machine Data

FIG. 7 is a flow diagram illustrating a process 700 for copying data ofa virtual machine 110. (E.g., according to the indication received instep 305 of the process 300 of FIG. 3, or according to a storagepolicy.) One or more of the entities illustrated in the figures (e.g.,FIGS. 1A, 1B, 2, and/or 10) may perform different aspects of the process700. In some examples, a storage manager 1005 instigates the process 700by sending an indication specifying the storage operation to the dataagent 155 on the virtual machine storage manager 145. The data agent 155performs the copying of the data of the virtual machine 110. The dataagent 155 sends the data to a secondary storage computing device 1065,which then stores the data on one or more storage devices 1015 (e.g.,the secondary storage data store 175). In some examples, less than allof these entities may be involved in performing the storage operation.The processes described herein are indicated as being performed by thedata agent 155, although those of skill in the art will understand thataspects of the process 700 may be performed by any one of the entitiesdescribed herein (e.g., the storage manager 1005, the secondary storagecomputing device 1065, etc.).

As previously described, the integration component 157 encapsulates thevirtual machine mount component 154 and provides an API for accessingthe virtual machine mount component 154. For example, if the virtualmachines 110 are VMware virtual machines, the virtual machine mountcomponent 154 may be VMware's vcbMounter command-line tool, and theintegration component 157 may encapsulate the functionality provided byvcbMounter into an API and redirect the output of the vcbMounter tool.At step 705, the data agent 155 calls an API function of the integrationcomponent 157 to quiesce the file systems of the virtual machine 110.Quiescing the file systems ensures that no file system writes arepending at the time a snapshot of a virtual machine 110 is taken,thereby allowing the creation of filesystem-consistent copies. The dataagent 155 may, prior to quiescing the file systems in step 705, alsoquiesce applications that are executing on the virtual machine 110 orare loaded on the virtual machine 110.

At step 710, the data agent 155 calls an API function of the integrationcomponent 157 to put the virtual machine 110 into snapshot mode.Alternatively, the data agent 155 may call a function of the APIcomponent 210 to put the virtual machine 110 into snapshot mode. Whenthe virtual machine 110 is put into snapshot mode, the virtual machine110 stops writing to its virtual disks 140 (e.g., stops writing to theone or more *.vmdk files or *.vhd files) on the primary storage datastore 135. The virtual machine 110 writes future writes to a delta diskfile (e.g., a *delta.vmdk file) on the primary storage data store 135.Putting the virtual machine 110 into snapshot mode enables the virtualmachine 110 to continue operating during the process 700. At step 715the data agent 155 calls an API function of the integration component157 to unquiesce the file systems of the virtual machine 110. The dataagent 155 may, subsequent to unquiescing the file systems in step 705,also unquiesce any applications that were previously quiesced.

At step 720 the data agent 155 determines (e.g., based upon theindication received in step 305 of the process 300 of FIG. 3), how tocopy the data of the virtual machine 110. For example, the data agent155 may copy the data of the virtual machine 110 in one of threeways: 1) a file-level copy; 2) an image-level copy; or 3) a disk-levelcopy.

File-Level Copy

If the indication specifies that the data agent 155 is to perform afile-level copy, the process 700 branches to the file-level copy branch.For example, an administrator may provide that a file-level copy is tobe performed if the administrator wishes to copy only certain files on avolume of a virtual disk 140 (e.g., only files within a certaindirectory or files that satisfy certain criteria). At step 722, the dataagent 155 determines a mount point of the data store 165 on the virtualmachine storage manager 145 (e.g., by dynamically determining anavailable mount point or by reading a stored indication of a mount pointto use). For example, the mount point may be C:\mount\<virtual machinename>\ on the data store 165. At step 724 the data agent 155 determinesthe volumes of the virtual machine 110 (e.g., by calling an API functionof the integration component 157 or by calling a function of the APIcomponent 210). For example, a virtual machine 110 using a MicrosoftWindows operating system may have a C:\ volume, a D:\ volume, and soforth. At step 726 the data agent 155 mounts the determined volumescontaining files at the determined mount point of the data store 165(e.g., by again calling an API function of the integration component 157or by calling a function of the API component 210).

As previously described, a virtual disk 140 corresponds to one or morefiles (e.g., one or more *.vmdk or *.vhd files), called virtual diskfiles, on the primary storage datastore 135. A volume may span one ormore virtual disks 140, or one or more volumes may be contained within avirtual disk 140. When the data agent 155 mounts the determined volumes,the primary storage data store 135 sends to the VLUN driver 152 a blocklist of the virtual disk files corresponding to the virtual disks 140 ofthe determined volumes. The VLUN driver 152 uses the block listinformation to present the determined volumes (e.g., as read-onlyvolumes or as read-write volumes) to the operating system of the virtualmachine storage manager 145. The data agent 155 communicates with theVLUN driver 152 to mount the determined volumes at the mount point ofthe virtual machine storage manager 145. Using the previous examples ofa virtual machine 110 with a C:\ volume and a D:\ volume, the data agent155 would mount these volumes at the following respective locations:

C:\mount\<virtual machine name>\letters\C

C:\mount\<virtual machine name>\letters\D

After mounting the determined volumes, the data agent 155 can present toan administrator an interface displaying the mounted volumes and thedirectories and files on the mounted volumes, to enable theadministrator to select which files and/or directories are to be copied.Alternatively, files and/or directories can be automatically selected inaccordance with a storage policy determined by the virtual machine's 110membership in a sub-client, or in accordance with a set of criteria orrules. At step 728 the data agent 155 copies the selected files and/ordirectories on the determined volumes to the secondary storage datastore 175 (e.g., via a secondary storage computing device). The dataagent 155 does so by providing an indication of a file and/or directorythat is to be copied to the VLUN driver 152, which requests the blockscorresponding to the selected file and/or directory in the virtual diskfiles 140 on the primary storage datastore 135. The mapping betweenblocks and files/directories may be maintained by the primary storagedata store 135 (e.g., in a table or other data structure).

After completing the copy, the data agent 155 at step 730 unmounts thedetermined volumes from the virtual machine storage manager 145 (e.g.,by calling an API function of the integration component 157 or bycalling a function of the API component 210). At step 732 the data agent155 calls an API function of the integration component 157 to take thevirtual machine 110 out of snapshot mode. Alternatively, the data agent155 may call a function of the API component 210 to take the virtualmachine 110 out of snapshot mode. Taking the virtual machine 110 out ofsnapshot mode consolidates the writes from the delta disk file (e.g.,any intervening write operations to the virtual disk 140 between thetime the virtual machine 110 was put into snapshot mode and the time itwas taken out of snapshot mode) to the virtual disk file of the virtualdisk 140. In this way, performing a copy operation on a primary copy ofvirtual machine data does not affect the virtual machine's 110 use ofthe data. Rather, operations can pick up at the point where they leftoff. The process 700 then concludes.

Volume-Level Copy

If the indication specifies that the data agent 155 is to perform avolume-level copy, the process 700 branches to the volume-level copybranch. The process for performing a volume-level copy is similar tothat for performing a file-level copy, and steps 722 through 726 areeffectively the same for this second branch of the process 700. At step754 the data agent 155 analyzes the virtual volume and extracts metadatafrom the virtual volume. This process is described in more detailherein, e.g., with reference to FIG. 8.

After mounting the determined volumes (step 726 of the volume-level copybranch), the data agent 155 can present to an administrator an interfacedisplaying the mounted volumes (optionally, the files and/or directorieson the mounted volumes can also be displayed) to enable theadministrator to select which volumes are to be copied. Alternatively,volumes can be automatically selected in accordance with a storagepolicy determined by the virtual machine's 110 membership in asub-client, or in accordance with a set of criteria or rules. At step734 the data agent 155 copies the selected volumes at the mount point onthe virtual machine storage manager 145 to the secondary storage datastore 175 (e.g., via a secondary storage computing device). The dataagent 155 does so by providing an indication of a volume that is to becopied to the VLUN driver 152, which requests the blocks correspondingto the selected volumes in the virtual disk files 140 on the primarystorage datastore 135. The mapping between blocks and volumes may bemaintained by the primary storage data store 135 (e.g., in a table orother data structure).

After copying, the data agent 155 at step 730 unmounts the determinedvolumes from the virtual machine storage manager 145 (e.g., by callingan API function of the integration component 157 or by calling afunction of the API component 210). At step 732 the data agent 155 callsan API function of the integration component 157 to take the virtualmachine 110 out of snapshot mode. Alternatively, the data agent 155 maycall a function of the API component 210 to take the virtual machine 110out of snapshot mode. Taking the virtual machine 110 out of snapshotmode consolidates the writes to the delta disk file to the virtual diskfile of the virtual disk 140. The process 700 then concludes.

One advantage of performing copy operations at the file-level or thevolume-level is that the data agent 155 can copy the virtual machinedata from the primary storage datastore 135 to the secondary storagedata store 175 without having to copy it to the datastore 165 on thevirtual machine storage manager 145. Stated another way, the data agent155 can obtain the virtual machine data from the primary storagedatastore 135, perform any specified operations upon it (e.g., compressit, single or variable instance it, encrypt it, etc.), and stream thevirtual machine data to the secondary storage data store 175 (e.g., viaa secondary storage computing device 1065), without staging or cachingthe data at the virtual machine storage manager 145. This allows thedata agent 155 to copy the data directly to the secondary storage datastore 175, without first copying it to an intermediate location.Accordingly, the data agent 155 can quickly and efficiently performfile-level and volume-level copies of data of virtual machines 110.

Disk-Level Copy

The file-level copy and the volume-level copy can be thought of asoperating at the virtual level. In other words, the data agent 155 mayhave to utilize data structures, functions or other information oraspects exposed or provided by a virtual machine 110 (or the virtualmachine host 105) in order to copy the data of the virtual machine 110to the secondary storage data store 175. For example, in order toperform a file-level or volume-level copy of the data of a virtualmachine 110, the data agent 155 utilizes some information or aspect ofthe virtual machine 110 to determine its files and directories and/orvolumes. The data agent 155 does so in order to present the determinedfiles and directories or volumes for their selection by anadministrator, or in order to apply, implement or execute storageoperations according to a storage policy. In contrast, a disk-level copycan be thought of as operating at a non-virtual level (e.g., at a levelof the physical computer hosting the virtual machine 110 and/or thephysical storage media upon which the virtual machine data is stored).In other words, the data agent 155 can directly access the physicalstorage media storing the data of the virtual machine 110 (e.g., theprimary storage data store 135 connected via the SAN 130) to copy thevirtual disks 140 of the virtual machine 110. Because the data agent 155is copying the virtual disks 140 without necessarily determining filesand directories or volumes of the virtual machine 110, the data agent155 does not necessarily have to utilize information or aspects of thevirtual machine 110 or the virtual machine host 105.

If the indication specifies that the data agent 155 is to perform adisk-level copy, the process branches to the disk-level copy branch. Atstep 746, the data agent 155 determines a copy point on the data store165. For example, the copy point may be C:\copy\<virtual machinename>-copyvirtualmachine\ on the data store 165. At step 748 the dataagent 155 determines the virtual disk and any associated configurationfiles (e.g., the *.vmx file and/or the disk descriptor files) of thevirtual machine 110 (e.g., by calling an API function of the integrationcomponent 157 or by calling a function of the API component 210). Theprimary storage data store 135 sends to the VLUN driver 152 a block listof the virtual disk and configuration files. At step 750, the data agent155 copies these files to the copy point on the datastore 165 on thevirtual machine storage manager 145. The data agent 155 does so byproviding an indication of the virtual disk and configuration files tothe VLUN driver 152, which requests the blocks corresponding to thevirtual disk and configuration files from the primary storage datastore135. The mapping between blocks and files/directories may be maintainedby the primary storage data store 135 (e.g., in a table or other datastructure).

At step 752 the data agent 155 calls an API function of the integrationcomponent 157 to take the virtual machine 110 out of snapshot mode (orcalls a function of the API component 210). At step 754 the data agent155 analyzes the virtual disk and configuration files and extractsmetadata from the virtual disk and configuration files. This process isdescribed in more detail herein, e.g., with reference to FIG. 8. At step756 the data agent 155 copies the virtual disk and configuration filesto the secondary storage data store 175. At step 758 the data agent 155removes the copied virtual disk and configuration files from the datastore 165 on the virtual machine storage manager 145. The process 700then concludes.

Because a disk-level copy operates essentially at a non-virtual level,it may not have to utilize information or aspects of the virtual machine110 (or the virtual machine host 105) in order to copy its data to thesecondary storage data store 175. Therefore, a disk-level copy may notnecessarily involve much of the overhead involved in a file-level copyor a volume-level copy. Rather, a disk-level copy can directly accessthe physical storage media storing the data of the virtual machine 110(e.g., the primary storage data store 135) to copy the virtual disks 140of the virtual machine 110. Because a disk-level copy can directlyaccess the primary storage data store 135, the volumes on the virtualdisks 140 do not need to be mounted. Accordingly, a disk-level copy maybe performed faster and more efficiently than a file-level copy or avolume-level copy.

Process for Extracting Metadata

Certain steps in the following process for extracting metadata from thevirtual volumes and/or the virtual disk and configuration files aredescribed below using a configuration of a virtual machine 110 having asingle virtual disk 140 comprised in a single virtual disk file. Thoseof skill in the art will understand that the process is not limited inany way to this configuration. Rather, the following process may be usedto extract metadata from virtual disk and configuration files that arearranged or structured in a wide variety of configurations, such asmultiple virtual disks 140 spanning multiple virtual disk files.Generally, metadata refers to data or information about data. Metadatamay include, for example, data relating to relationships between virtualdisk files, data relating to how volumes are structured on virtual disks140, and data relating to a location of a file allocation table or amaster file table. Metadata may also include data describing files anddata objects (e.g., names of files or data objects, timestamps of filesor data objects, ACL entries, and file or data object summary, author,source or other information). Metadata may also include data relating tostorage operations or storage management, such as data locations,storage management components associated with data, storage devices usedin performing storage operations, index data, data application type, orother data. Those of skill in the art will understand that metadata mayinclude data or information about data other than the examples givenherein.

FIG. 8 is a flow diagram illustrating a process 800 performed by thevirtual disk analyzer component 160 for extracting metadata (e.g., filelocation metadata and metadata describing virtual disks 140 and/or filesand/or volumes within virtual disks 140) from virtual volumes and/orvirtual disk and configuration files. The process 800 begins at step805, where the virtual disk analyzer component 160 of the data agent 155accesses the configuration files to determine if there are anyparent-child relationships between virtual disk files (e.g., the virtualdisk analyzer component 160 determines how many links in a chain ofvirtual disk files there are). The virtual disk analyzer component 160performs this step by reading and analyzing the virtual disk and/orconfiguration files.

For example, for a VMware virtual machine 110, the virtual disk analyzercomponent 160 may read and analyze the *.vmx configuration files and/orthe *.vmdk disk descriptor files. In this example, the parent virtualdisk 140 may be named “basedisk.vmdk.” The parent virtual disk 140 mayhave a *.vmdk disk descriptor file with an entry that uniquelyidentifies the parent virtual disk 140 having the following syntax:

[identifier-name]=[identifier-value]

For example, the entry CID=daf6cf10 comports with this syntax. A firstchild virtual disk 140 (e.g., a first snapshot) may be named“basedisk-000001.vmdk.” The first child virtual disk 140 may have a*.vmdk disk descriptor file with an entry that uniquely identifies itsparent having the following syntax:

[parentidentifier-name]=[parentidentifier-value]

For example, the entry parentCID=daf6cf10 comports with this syntax. Thevirtual disk analyzer component 160 may identify parent-childrelationships between virtual disk files in other ways, such as byobserving access to virtual disk files inferring the relationships bysuch observations. At step 810 the virtual disk analyzer component 160determines the relationships between virtual disk files (the virtualdisk analyzer component 160 determines how the virtual disk 140 isstructured—how many extents make up each link in the chain). The virtualdisk analyzer component 160 performs this step by reading and analyzingthe disk descriptor file if it is a separate file or by reading the diskdescriptor information if it is embedded into the virtual disk file. Thevirtual disk analyzer component 160 may determine the relationshipsbetween virtual disk files in other ways, such as by observing access tovirtual disk files and inferring the relationships from suchobservations.

At step 815 the virtual disk analyzer component 160 determines how thepartitions and volumes are structured on the virtual disks 140. Thevirtual disk analyzer component 160 does this by reading the sectors ofthe virtual disks 140 that contain the partition tables to determine howthe virtual disk 140 is structured (e.g., whether it is a basic or adynamic disk). The virtual disk analyzer component 160 also reads thesectors of the virtual disks 140 that contain the logical volume managerdatabases. Because the locations of these sectors (e.g., the sectors ofthe partition tables and the logical volume manager databases) arewell-known and/or can be dynamically determined, the virtual diskanalyzer component 160 can use techniques that are well-known to thoseof skill in the art to read those sectors and extract the necessarydata. The virtual disk analyzer component 160 is thus able to determinehow the virtual disks 140 is partitioned by the operating system 120 ofthe virtual machine 110 and how volumes are laid out in the virtualdisks 140 (e.g., if there are simple volumes, spanned volumes, stripedvolumes, mirrored volumes, and/or RAID-5 volumes, etc.)

At step 820 the virtual disk analyzer component 160 determines thelocation of the Master File Table (MFT) or similar file allocation tablefor each volume. As with the partition tables and the logical volumemanager databases, the locations of the sectors containing the MFT arewell-known and/or can be dynamically determined. Therefore, the virtualdisk analyzer component 160 can use techniques that are well-known tothose of skill in the art to determine the location of the MFT. At step825 the virtual disk analyzer component 160 stores the determinedparent-child relationships relationships between virtual disk files, thedetermined structure of volumes of the virtual disks 140, and thedetermined location of the MFT in a data structure, such as a table. Forexample, a table having the following schema may be used to store thisinformation:

Virtual Virtual disk Volume Location Machine ID file relationshipsstructures of MFT E.g., a substantially E.g., description E.g.,partition E.g., the unique identifier for of the parent-childinformation location of the virtual machine relationships, such and howvirtual the MFT 110 as by a hierarchical volumes are within eachdescription laid out on volume virtual disks

The virtual disk analyzer component 160 may use other data structures tostore this information in addition or as an alternative to the precedingtable. The virtual disk analyzer component 160 may store thisinformation in the secondary storage data store 175 or in another datastore. The virtual disk analyzer component 160 may also collect othermetadata, such as metadata describing virtual disks 140 and/or metadatadescribing files and/or data objects within virtual disks 140. Forexample, instead of storing the determined location of the MFT, thevirtual disk analyzer component 160 could store the locations of filesor data objects within virtual disks 140. After storing this metadata,the process 800 then concludes.

Process for Restoring Data of Virtual Machines

FIG. 9 is a flow diagram illustrating a process 900 performed by thesecondary storage computing device 1065 for restoring virtual machinedata. One or more of the entities illustrated in the figures (e.g.,FIGS. 1A, 1B, 2, and/or 10) may perform different aspects of the process900. In some examples, an administrator at a management consoleinstigates the process 900 by sending an indication to restore virtualmachine data to the secondary storage computing device 1065. Thesecondary storage computing device 1065 accesses the index 1061 tolocate the virtual machine data, and accesses the storage devices 1015(e.g., the secondary storage data store 175) upon which the virtualmachine data is located. The secondary storage computing device 1065restores the data from the storage devices 1015 to a specified location(e.g., a location specified by the administrator).

The process 900 begins at step 905 where the secondary storage computingdevice 1065 receives an indication to restore data of one or morevirtual machines 110. The indication can be to restore one or morefiles, one or more volumes, one or more virtual disks of a virtualmachine 110, or an entire virtual machine 110. At step 910 the secondarystorage computing device 1065 determines how (e.g., by analyzing theindex 1061) the data agent 155 originally copied the virtual machinedata, either: 1) a file-level copy; 2) an image-level copy; or 3) adisk-level copy.

Restore from a File-Level Copy

If the data agent 155 originally performed a file-level copy, theprocess 900 branches to the file-level restore branch. At step 915, thesecondary storage computing device 1065 mounts a copy set correspondingto the files to be restored from the secondary storage data store 175.The copy set may be manually selected by an administrator orautomatically selected based on an association between the copy set andthe virtual machine from which the data in the copy set came.Additionally or alternatively, the copy set may be automaticallydetermined based upon the metadata extracted and stored (described withreference to, e.g., FIG. 8) or based upon other metadata (e.g., metadatastored in index 1061).

Because the data agent 155 originally performed a file-level copy (ofselected files and/or directories), the secondary storage computingdevice 1065 generally restores files and/or directories out of the copyset. At step 920 the secondary storage computing device 1065 restoresone or more files or directories (e.g., a single file) out of the copyset. For example, the secondary storage computing device 1065 can call afunction of an API exposed by a virtual machine 110 or its hostingvirtual machine host 105 to restore the one or more files or directoriesto the virtual machine 110. As another example, the secondary storagecomputing device 1065 can copy the one or more files or directories tothe primary storage data store 135. The secondary storage computingdevice 1065 can restore the one or more files or directories to theoriginal virtual machine 110 from which they were originally copied, toa different virtual machine 110, to a non-virtual machine, and/or toanother storage device 1015. The process 900 then concludes.

Restore from a Volume-Level Copy

If the data agent 155 originally performed a volume-level copy, theprocess 900 branches to the volume-level restore branch. At step 915,the secondary storage computing device 1065 mounts a copy setcorresponding to the files or volumes to be restored from the secondarystorage data store 175. The copy set may be manually selected by anadministrator or automatically selected based on an association betweenthe copy set and the virtual machine 110 from which the data in the copyset came. Additionally or alternatively, the copy set may beautomatically determined based upon the metadata extracted and stored(described with reference to, e.g., FIG. 8) or based upon other metadata(e.g., metadata stored in index 1061).

At step 945 the secondary storage computing device 1065 accessesmetadata corresponding to the data that is to be restored (e.g., thedetermined location of the MFT). This is the metadata that was stored instep 825 of the process 800. At step 960 the secondary storage computingdevice 1065 uses the determined location of the MFT to access the MFTand use the entries in the MFT to determine where the files anddirectories on the virtual disk 140 are located (e.g., on which sectorsof the virtual disk 140 a particular file is located).

Because the data agent 155 originally performed a volume-level copy (ofselected volumes including files and/or directories within the volumes),the secondary storage computing device 1065 can generally restore bothfiles and/or directories and entire volumes (e.g., an entire C:\ volume,an entire D:\ volume, etc.) out of the copy set. If the secondarystorage computing device 1065 is to restore a file, the process 900branches to step 920. At this step the secondary storage computingdevice 1065 restores one or more files or directories out of the copyset (e.g., a single file). The secondary storage computing device 1065can restore the one or more files or directories to the original virtualmachine 110 from which they were originally copied, to a differentvirtual machine 110, to a non-virtual machine, and/or to another storagedevice 1015. For example, if the original virtual machine 110 no longerexists, the one or more files or directories may be restored to itsreplacement.

If instead, the secondary storage computing device 1065 is to restore avolume, the process 900 branches to step 930. At this step the secondarystorage computing device 1065 restores one or more volumes out of thecopy set. The data agent 155 secondary storage computing device 1065 canrestore the one or more volumes to the original virtual machine 110 fromwhich they were originally copied up, to a different virtual machine110, or to a non-virtual machine and/or to another storage device 1015.For example, a C:\ volume may be restored out of a copy set to theoriginal virtual machine 110 from which it was copied, thus overwritingits existing C:\ volume. As another example, a D:\ volume may berestored out of a copy set to another virtual machine 110, thusreplacing its current D:\ volume.

The secondary storage computing device 1065 may restore the files,directories and/or volumes to various locations. For example, thesecondary storage computing device 1065 can copy the files, directoriesand/or volumes to the primary storage data store 135. The secondarystorage computing device 1065 can restore the one or more volumes to theoriginal virtual machine 110 from which they were originally copied up,to a different virtual machine 110, to a non-virtual machine (e.g., to aphysical machine), and/or to another storage device 1015. For example,an entire D:\ volume from an original virtual machine 110 may berestored to the original virtual machine 110, to another virtual machine110 and/or to a non-virtual machine (e.g., to a physical machine). Asdescribed in more detail herein, a volume of a virtual machine 110 maybe restored in its original format (e.g., if the volume came from aVMware virtual machine 110, it can be restored as a volume in the VMwareformat, such as a *.vmdk file) or converted to another format (e.g., ifthe volume came from a VMware virtual machine 110, it can be restored asa volume in the Microsoft format, such as a *.vhd file). The secondarystorage computing device 1065 can also restore the volume as a containerfile, from which the volume can be extracted. After steps 920 and/or930, the process 900 then concludes.

Restore from a Disk-Level Copy

If the data agent 155 originally performed a disk-level copy, theprocess 900 branches to the disk-level restore branch. At step 915, thesecondary storage computing device 1065 mounts a copy set correspondingto the virtual disks, files, volumes, and/or virtual machines 110 to berestored from the secondary storage data store 175. The copy set may bemanually selected by an administrator or automatically selected based onan association between the copy set and the virtual machine from whichthe data in the copy set came. Additionally or alternatively, the copyset may be automatically determined based upon the metadata extractedand stored (described herein, e.g., with reference to FIG. 8) or basedupon other metadata (e.g., metadata stored in index 1061).

At step 945 the secondary storage computing device 1065 accessesmetadata corresponding to the data that is to be restored (e.g., thedetermined parent-child relationships and relationships between virtualdisk files, the determined structure of volumes of the virtual disks140, and the determined location of the MFT). This is the metadata thatwas stored in step 825 of the process 800. At step 950 the secondarystorage computing device 1065 uses the determined parent-childrelationships and relationships between virtual disk files toreconstruct the virtual disks 140. For example, if a virtual disk 140 iscomprised of numerous virtual disk files, the secondary storagecomputing device 1065 uses the determined relationships between them tolink them together into a single virtual disk file. In so doing, thesecondary storage computing device 1065 may access grain directories andgrain tables within virtual disk files. Grain directories and graintables are data structures located within virtual disk files thatspecify the sectors (blocks) within virtual disks 140 that have beenallocated for data storage. The secondary storage computing device 1065may access these data structures to locate data within virtual disks140.

At step 955 the secondary storage computing device 1065 uses thedetermined structure of volumes of the virtual disks 140 to reconstructthe volumes. At step 960 the secondary storage computing device 1065uses the determined location of the MFT to access the MFT and uses theentries in the MFT to determine where the files and directories on thevirtual disk 140 are located (e.g., on which sectors of the virtual disk140 a particular file is located).

Because the data agent 155 originally performed a disk-level copy (ofvirtual disk and configuration files), the secondary storage computingdevice 1065 can restore files or directories, entire volumes (e.g., anentire C:\ volume, an entire D:\ volume, etc.) as well as an entirevirtual machine 110 out of the copy set. If an entire virtual machine110 is to be restored, the process 900 branches to step 965. Thesecondary storage computing device 1065 can copy all the virtual diskand configuration files to the location where the entire virtual machine110 is to be restored. This can be the original location of the virtualmachine 110 (on the original virtual machine host 105), or it can be anew location where the virtual machine had not originally been located(e.g., on a new virtual machine host 105.) If the virtual disk andconfiguration files are copied to the original virtual machine host 105,the virtual machine host 105 should be able to restart the virtualmachine 110, which can then recommence operating in the state it existedin when its virtual disk and configuration files were originally copied.

Similarly, if the virtual disk and configuration files are copied to anew virtual machine host 105, the new virtual machine host 105 should beable to start the virtual machine 110, which can then commence operatingin the state it existed in when its virtual disk and configuration fileswere originally copied. The ability to restore a virtual machine 110 toa new virtual machine host 105 other than its original virtual machinehost 105 allows virtual machines 110 to be moved or “floated” from onevirtual machine host 105 to another. The secondary storage computingdevice 1065 can also restore the entire virtual machine 110 as acontainer file, from which the entire virtual machine 110 can beextracted. After step 965, the process 900 then concludes.

If instead of restoring an entire virtual machine 110, the secondarystorage computing device 1065 is to restore a volume, the process 900branches to step 930. At this step the secondary storage computingdevice 1065 restores one or more volumes out of the copy set. After step930, the process 900 then concludes.

If instead of restoring an entire virtual machine 110 or a volume, thesecondary storage computing device 1065 is to restore a file, theprocess 900 branches to step 920. At this step the secondary storagecomputing device 1065 restores one or more files or directories out ofthe copy set (e.g., a single file). The secondary storage computingdevice 1065 can restore the one or more files or directories to theoriginal virtual machine 110 from which they were originally copied, toa different virtual machine 110, to non-virtual machine, and/or toanother storage device 1015. The process 900 then concludes.

If instead of restoring an entire virtual machine 110, a volume, or afile, the secondary storage computing device 1065 is to restore one ormore virtual disks, the process 900 branches to step 970. At this stepthe secondary storage computing device 1065 restores the virtual diskand configuration files corresponding to the one or more virtual disksto be restored out of the copy set. The secondary storage computingdevice 1065 can restore the one or more virtual disks to the originalvirtual machine host 105 from which they were originally copied.Additionally or alternatively, the secondary storage computing device1065 can restore the one or more virtual disks to the original virtualmachine 110 from which they were originally copied, to a differentvirtual machine 110, to a non-virtual machine, and/or to another storagedevice 1015. If the one or more virtual disks are to be restored to thevirtual machine 105, they may overwrite, replace and/or supplement theexisting virtual disks of a virtual machine 110. The process 900 thenconcludes.

Depending upon what the secondary storage computing device 1065 is torestore, certain steps in the process 900 may not need to be performed.For example, if the secondary storage computing device 1065 is torestore an entire virtual machine 110 out of a disk-level copy, the dataagent 155 may not need to access the stored metadata (step 945) orreconstruct the virtual disk 140, volumes and files (steps 950, 955 and960). The data agent 155 can simply mount the copy set and copy thevirtual disk and configuration files to the appropriate location. Asanother example, if the secondary storage computing device 1065 is torestore a volume out of a disk-level copy, the secondary storagecomputing device 1065 may not need to reconstruct files using the MFT,as mentioned above. The secondary storage computing device 1065 cansimply reconstruct the volumes and then copy the volumes to theappropriate location. Those of skill in the art will understand thatmore or fewer steps than those illustrated in the process 900 may beused to restore data of virtual machines 110.

As previously described, one advantage of performing a disk-level copyis that it may be quicker and more efficient than file-level orvolume-level copying. Also as previously described, the process ofextracting metadata from the virtual disk and configuration filesenables the ability to restore individual files, directories and/orvolumes to the virtual machine 110 or to other locations (e.g., to othervirtual machines 110 to non-virtual machines, and/or to other storagedevices 1015). The combination of a disk-level copy and the capabilityto restore individual files, directories and/or volumes of a virtualmachine 110 provides for a fast and efficient process for duplicatingprimary copies of data, while still enabling granular access (e.g., atthe individual file or data object level) to the duplicated primary data(granular access to the secondary copies of data is enabled). Thiscombination optimizes the aspect of virtual machine data management thatis likely performed most frequently (duplication of primary copies ofdata), but not at the expense of the aspect that is likely performedless often (restoration of secondary copies of data), because granularaccess to duplicated primary copies of data is still enabled.

Suitable Data Storage Enterprise

FIG. 10 illustrates an example of one arrangement of resources in acomputing network, comprising a data storage system 1050. The resourcesin the data storage system 1050 may employ the processes and techniquesdescribed herein. The system 1050 includes a storage manager 1005, oneor more data agents 1095, one or more secondary storage computingdevices 1065, one or more storage devices 1015, one or more clients1030, one or more data or information stores 1060 and 1062, a singleinstancing database 1023, an index 1011, a jobs agent 1020, an interfaceagent 1025, and a management agent 1031. The system 1050 may represent amodular storage system such as the CommVault QiNetix system, and alsothe CommVault GALAXY backup system, available from CommVault Systems,Inc. of Oceanport, N.J., aspects of which are further described in thecommonly-assigned U.S. patent application Ser. No. 09/610,738, now U.S.Pat. No. 7,035,880, the entirety of which is incorporated by referenceherein. The system 1050 may also represent a modular storage system suchas the CommVault Simpana system, also available from CommVault Systems,Inc.

The system 1050 may generally include combinations of hardware andsoftware components associated with performing storage operations onelectronic data. Storage operations include copying, backing up,creating, storing, retrieving, and/or migrating primary storage data(e.g., data stores 1060 and/or 1062) and secondary storage data (whichmay include, for example, snapshot copies, backup copies, HSM copies,archive copies, and other types of copies of electronic data stored onstorage devices 1015). The system 1050 may provide one or moreintegrated management consoles for users or system processes tointerface with in order to perform certain storage operations onelectronic data as further described herein. Such integrated managementconsoles may be displayed at a central control facility or severalsimilar consoles distributed throughout multiple network locations toprovide global or geographically specific network data storageinformation.

In one example, storage operations may be performed according to variousstorage preferences, for example, as expressed by a user preference, astorage policy, a schedule policy, and/or a retention policy. A “storagepolicy” is generally a data structure or other information source thatincludes a set of preferences and other storage criteria associated withperforming a storage operation. The preferences and storage criteria mayinclude, but are not limited to, a storage location, relationshipsbetween system components, network pathways to utilize in a storageoperation, data characteristics, compression or encryption requirements,preferred system components to utilize in a storage operation, a singleinstancing or variable instancing policy to apply to the data, and/orother criteria relating to a storage operation. For example, a storagepolicy may indicate that certain data is to be stored in the storagedevice 1015, retained for a specified period of time before being agedto another tier of secondary storage, copied to the storage device 1015using a specified number of data streams, etc.

A “schedule policy” may specify a frequency with which to performstorage operations and a window of time within which to perform them.For example, a schedule policy may specify that a storage operation isto be performed every Saturday morning from 2:00 a.m. to 4:00 a.m. Insome cases, the storage policy includes information generally specifiedby the schedule policy. (Put another way, the storage policy includesthe schedule policy.) Storage policies and/or schedule policies may bestored in a database of the storage manager 1005, to archive media asmetadata for use in restore operations or other storage operations, orto other locations or components of the system 1050.

The system 1050 may comprise a storage operation cell that is one ofmultiple storage operation cells arranged in a hierarchy or otherorganization. Storage operation cells may be related to backup cells andprovide some or all of the functionality of backup cells as described inthe assignee's U.S. patent application Ser. No. 09/354,058, now U.S.Pat. No. 7,395,282, which is incorporated herein by reference in itsentirety. However, storage operation cells may also perform additionaltypes of storage operations and other types of storage managementfunctions that are not generally offered by backup cells.

Storage operation cells may contain not only physical devices, but alsomay represent logical concepts, organizations, and hierarchies. Forexample, a first storage operation cell may be configured to perform afirst type of storage operations such as HSM operations, which mayinclude backup or other types of data migration, and may include avariety of physical components including a storage manager 1005 (ormanagement agent 1031), a secondary storage computing device 1065, aclient 1030, and other components as described herein. A second storageoperation cell may contain the same or similar physical components;however, it may be configured to perform a second type of storageoperations, such as storage resource management (“SRM”) operations, andmay include monitoring a primary data copy or performing other known SRMoperations.

Thus, as can be seen from the above, although the first and secondstorage operation cells are logically distinct entities configured toperform different management functions (HSM and SRM, respectively), eachstorage operation cell may contain the same or similar physical devices.Alternatively, different storage operation cells may contain some of thesame physical devices and not others. For example, a storage operationcell configured to perform SRM tasks may contain a secondary storagecomputing device 1065, client 1030, or other network device connected toa primary storage volume, while a storage operation cell configured toperform HSM tasks may instead include a secondary storage computingdevice 1065, client 1030, or other network device connected to asecondary storage volume and not contain the elements or componentsassociated with and including the primary storage volume. (The term“connected” as used herein does not necessarily require a physicalconnection; rather, it could refer to two devices that are operablycoupled to each other, communicably coupled to each other, incommunication with each other, or more generally, refer to thecapability of two devices to communicate with each other.) These twostorage operation cells, however, may each include a different storagemanager 1005 that coordinates storage operations via the same secondarystorage computing devices 1065 and storage devices 1015. This“overlapping” configuration allows storage resources to be accessed bymore than one storage manager 1005, such that multiple paths exist toeach storage device 1015 facilitating failover, load balancing, andpromoting robust data access via alternative routes.

Alternatively or additionally, the same storage manager 1005 may controltwo or more storage operation cells (whether or not each storageoperation cell has its own dedicated storage manager 1005). Moreover, incertain embodiments, the extent or type of overlap may be user-defined(through a control console) or may be automatically configured tooptimize data storage and/or retrieval.

Data agent 1095 may be a software module or part of a software modulethat is generally responsible for performing storage operations on thedata of the client 1030 stored in data store 1060/1062 or other memorylocation. Each client 1030 may have at least one data agent 1095 and thesystem 1050 can support multiple clients 1030. Data agent 1095 may bedistributed between client 1030 and storage manager 1005 (and any otherintermediate components), or it may be deployed from a remote locationor its functions approximated by a remote process that performs some orall of the functions of data agent 1095.

The overall system 1050 may employ multiple data agents 1095, each ofwhich may perform storage operations on data associated with a differentapplication. For example, different individual data agents 1095 may bedesigned to handle Microsoft Exchange data, Lotus Notes data, MicrosoftWindows 2000 file system data, Microsoft Active Directory Objects data,and other types of data known in the art. Other embodiments may employone or more generic data agents 1095 that can handle and processmultiple data types rather than using the specialized data agentsdescribed above.

If a client 1030 has two or more types of data, one data agent 1095 maybe required for each data type to perform storage operations on the dataof the client 1030. For example, to back up, migrate, and restore allthe data on a Microsoft Exchange 2000 server, the client 1030 may useone Microsoft Exchange 2000 Mailbox data agent 1095 to back up theExchange 2000 mailboxes, one Microsoft Exchange 2000 Database data agent1095 to back up the Exchange 2000 databases, one Microsoft Exchange 2000Public Folder data agent 1095 to back up the Exchange 2000 PublicFolders, and one Microsoft Windows 2000 File System data agent 1095 toback up the file system of the client 1030. These data agents 1095 wouldbe treated as four separate data agents 1095 by the system even thoughthey reside on the same client 1030.

Alternatively, the overall system 1050 may use one or more generic dataagents 1095, each of which may be capable of handling two or more datatypes. For example, one generic data agent 1095 may be used to back up,migrate and restore Microsoft Exchange 2000 Mailbox data and MicrosoftExchange 2000 Database data while another generic data agent 1095 mayhandle Microsoft Exchange 2000 Public Folder data and Microsoft Windows2000 File System data, etc.

Data agents 1095 may be responsible for arranging or packing data to becopied or migrated into a certain format such as an archive file.Nonetheless, it will be understood that this represents only oneexample, and any suitable packing or containerization technique ortransfer methodology may be used if desired. Such an archive file mayinclude metadata, a list of files or data objects copied, the file, anddata objects themselves. Moreover, any data moved by the data agents maybe tracked within the system by updating indexes associated withappropriate storage managers 1005 or secondary storage computing devices1065. As used herein, a file or a data object refers to any collectionor grouping of bytes of data that can be viewed as one or more logicalunits.

Generally speaking, storage manager 1005 may be a software module orother application that coordinates and controls storage operationsperformed by the system 1050. Storage manager 1005 may communicate withsome or all elements of the system 1050, including clients 1030, dataagents 1095, secondary storage computing devices 1065, and storagedevices 1015, to initiate and manage storage operations (e.g., backups,migrations, data recovery operations, etc.).

Storage manager 1005 may include a jobs agent 1020 that monitors thestatus of some or all storage operations previously performed, currentlybeing performed, or scheduled to be performed by the system 1050. Jobsagent 1020 may be communicatively coupled to an interface agent 1025(e.g., a software module or application). Interface agent 1025 mayinclude information processing and display software, such as a graphicaluser interface (“GUI”), an application programming interface (“API”), orother interactive interface through which users and system processes canretrieve information about the status of storage operations. Forexample, in an arrangement of multiple storage operations cell, throughinterface agent 1025, users may optionally issue instructions to variousstorage operation cells regarding performance of the storage operationsas described and contemplated herein. For example, a user may modify aschedule concerning the number of pending snapshot copies or other typesof copies scheduled as needed to suit particular needs or requirements.As another example, a user may employ the GUI to view the status ofpending storage operations in some or all of the storage operation cellsin a given network or to monitor the status of certain components in aparticular storage operation cell (e.g., the amount of storage capacityleft in a particular storage device 1015).

Storage manager 1005 may also include a management agent 1031 that istypically implemented as a software module or application program. Ingeneral, management agent 1031 provides an interface that allows variousmanagement agents 1031 in other storage operation cells to communicatewith one another. For example, assume a certain network configurationincludes multiple storage operation cells hierarchically arranged orotherwise logically related in a WAN or LAN configuration. With thisarrangement, each storage operation cell may be connected to the otherthrough each respective interface agent 1025. This allows each storageoperation cell to send and receive certain pertinent information fromother storage operation cells, including status information, routinginformation, information regarding capacity and utilization, etc. Thesecommunications paths may also be used to convey information andinstructions regarding storage operations.

For example, a management agent 1031 in a first storage operation cellmay communicate with a management agent 1031 in a second storageoperation cell regarding the status of storage operations in the secondstorage operation cell. Another illustrative example includes the casewhere a management agent 1031 in a first storage operation cellcommunicates with a management agent 1031 in a second storage operationcell to control storage manager 1005 (and other components) of thesecond storage operation cell via management agent 1031 contained instorage manager 1005.

Another illustrative example is the case where management agent 1031 ina first storage operation cell communicates directly with and controlsthe components in a second storage operation cell and bypasses thestorage manager 1005 in the second storage operation cell. If desired,storage operation cells can also be organized hierarchically such thathierarchically superior cells control or pass information tohierarchically subordinate cells or vice versa.

Storage manager 1005 may also maintain an index, a database, or otherdata structure 1011. The data stored in database 1011 may be used toindicate logical associations between components of the system, userpreferences, management tasks, media containerization and data storageinformation or other useful data. For example, the storage manager 1005may use data from database 1011 to track logical associations betweensecondary storage computing device 1065 and storage devices 1015 (ormovement of data as containerized from primary to secondary storage).

Generally speaking, the secondary storage computing device 1065, whichmay also be referred to as a media agent, may be implemented as asoftware module that conveys data, as directed by storage manager 1005,between a client 1030 and one or more storage devices 1015 such as atape library, a magnetic media storage device, an optical media storagedevice, or any other suitable storage device. In one embodiment,secondary storage computing device 1065 may be communicatively coupledto and control a storage device 1015. A secondary storage computingdevice 1065 may be considered to be associated with a particular storagedevice 1015 if that secondary storage computing device 1065 is capableof routing and storing data to that particular storage device 1015.

In operation, a secondary storage computing device 1065 associated witha particular storage device 1015 may instruct the storage device to usea robotic arm or other retrieval means to load or eject a certainstorage media, and to subsequently archive, migrate, or restore data toor from that media. Secondary storage computing device 1065 maycommunicate with a storage device 1015 via a suitable communicationspath such as a SCSI or Fibre Channel communications link. In someembodiments, the storage device 1015 may be communicatively coupled tothe storage manager 1005 via a SAN.

Each secondary storage computing device 1065 may maintain an index, adatabase, or other data structure 1061 that may store index datagenerated during storage operations for secondary storage (SS) asdescribed herein, including creating a metabase (MB). For example,performing storage operations on Microsoft Exchange data may generateindex data. Such index data provides a secondary storage computingdevice 1065 or other external device with a fast and efficient mechanismfor locating data stored or backed up. Thus, a secondary storagecomputing device index 1061, or a database 1011 of a storage manager1005, may store data associating a client 1030 with a particularsecondary storage computing device 1065 or storage device 1015, forexample, as specified in a storage policy, while a database or otherdata structure in secondary storage computing device 1065 may indicatewhere specifically the data of the client 1030 is stored in storagedevice 1015, what specific files were stored, and other informationassociated with storage of the data of the client 1030. In someembodiments, such index data may be stored along with the data backed upin a storage device 1015, with an additional copy of the index datawritten to index cache in a secondary storage device. Thus the data isreadily available for use in storage operations and other activitieswithout having to be first retrieved from the storage device 1015.

Generally speaking, information stored in cache is typically recentinformation that reflects certain particulars about operations that haverecently occurred. After a certain period of time, this information issent to secondary storage and tracked. This information may need to beretrieved and uploaded back into a cache or other memory in a secondarycomputing device before data can be retrieved from storage device 1015.In some embodiments, the cached information may include informationregarding format or containerization of archives or other files storedon storage device 1015.

One or more of the secondary storage computing devices 1065 may alsomaintain one or more single instance databases 1023. Single instancing(alternatively called data deduplication) generally refers to storing insecondary storage only a single instance of each data object (or datablock) in a set of data (e.g., primary data). More details as to singleinstancing may be found in one or more of the followingpreviously-referenced U.S. patent application Ser. Nos. 11/269,512,12/145,347, 12/145,342, 11/963,623, 11/950,376, and 61/100,686.

In some examples, the secondary storage computing devices 1065 maintainone or more variable instance databases. Variable instancing generallyrefers to storing in secondary storage one or more instances, but fewerthan the total number of instances, of each data object (or data block)in a set of data (e.g., primary data). More details as to variableinstancing may be found in the previously-referenced U.S. Pat. App. No.61/164,803.

In some embodiments, certain components may reside and execute on thesame computer. For example, in some embodiments, a client 1030 such as adata agent 1095, or a storage manager 1005, coordinates and directslocal archiving, migration, and retrieval application functions asfurther described in the previously-referenced U.S. patent applicationSer. No. 09/610,738. This client 1030 can function independently ortogether with other similar clients 1030.

As shown in FIG. 10, secondary storage computing devices 1065 each hasits own associated metabase 1061. Each client 1030 may also have its ownassociated metabase 1070. However in some embodiments, each “tier” ofstorage, such as primary storage, secondary storage, tertiary storage,etc., may have multiple metabases or a centralized metabase, asdescribed herein. For example, rather than a separate metabase or indexassociated with each client 1030 in FIG. 10, the metabases on thisstorage tier may be centralized. Similarly, second and other tiers ofstorage may have either centralized or distributed metabases. Moreover,mixed architecture systems may be used if desired, that may include afirst tier centralized metabase system coupled to a second tier storagesystem having distributed metabases and vice versa, etc.

Moreover, in operation, a storage manager 1005 or other managementmodule may keep track of certain information that allows the storagemanager 1005 to select, designate, or otherwise identify metabases to besearched in response to certain queries as further described herein.Movement of data between primary and secondary storage may also involvemovement of associated metadata and other tracking information asfurther described herein.

In some examples, primary data may be organized into one or moresub-clients. A sub-client is a portion of the data of one or moreclients 1030, and can contain either all of the data of the clients 1030or a designated subset thereof. As depicted in FIG. 10, the data store1062 includes two sub-clients. For example, an administrator (or otheruser with the appropriate permissions; the term administrator is usedherein for brevity) may find it preferable to separate email data fromfinancial data using two different sub-clients having different storagepreferences, retention criteria, etc.

Detection of Virtual Machines and Other Virtual Resources

As previously noted, because virtual machines 110 may be easily set upand torn down, they may be less permanent in nature than non-virtualmachines. Due to this potential transience of virtual machines 110, itmay be more difficult to detect them, especially in a heterogeneous orotherwise disparate environment. For example, a virtual machine host 105may host a number of different virtual machines 110. Virtual machines110 may be discovered using the techniques previously described herein.Alternatively or additionally, virtual machines 110 could be detected byperiodically performing dynamic virtual resource detection routines toidentify virtual machines 110 in the network 180 (or some subsetthereof, such as a subnet). For example, the data agent 155 (or otheragent) could analyze program behaviors corresponding to known virtualresource behaviors, perform fingerprint, hash, or othercharacteristic-based detection methods or routines, query a systemdatastore (e.g., the Windows registry) or other data structure of thevirtual machine host 105 for keys or other identifiers associated withvirtual resources. The data agent 155 may use other methods and/orcombinations of these methods to detect virtual machines 110.

Once detected, the data agent 155 could maintain virtual machineidentifiers in a database or other data structure and use associatedprogram logic to track existing virtual machines 110 in the network 180.Alternatively or additionally, an administrator could manually populatethe database, or it could be populated as part of an install or virtualresource creation process, or by an agent or other software moduledirected to detecting installation of virtual machines. The data agent155 could update the database to remove a virtual machine identifierupon receiving an affirmative indication that the corresponding virtualmachine 110 has been taken down or removed from its virtual machine host105. Alternatively or additionally, the data agent 155 couldperiodically poll virtual machines 110 to determine if the virtualmachines 110 are still functioning. If a virtual machine 110 does notrespond after a certain number of polling attempts, the data agent 155may assume that the virtual machine 110 is no longer functioning andthus remove its identifier from the database. Alternatively oradditionally, the virtual machines 110 could periodically notify thedata agent 155 that they are still functioning (e.g., by sendingheartbeat messages to the data agent 155). Upon a failure to receivenotifications from a virtual machine 110 within a certain time period,the data agent 155 could remove its identifier from the database. Thedata agent 155 may use other methods and/or combinations of thesemethods to maintain an up-to-date listing of virtual machine identifiersin the database.

These techniques for detecting virtual machines 110 and maintainingidentifiers thereof may also be used to detect virtual resources ofvirtual machines 110 and maintain identifiers thereof. For example, avirtual machine 110 may be coupled to a virtual storage device such as avirtual NAS device or a virtual optical drive. The data agent 155 coulddetect these virtual resources and maintain identifiers for them in adatabase or other data structure. The virtual resources may then beaddressed as if they were actual resources. Once detected or identified,storage operations related to the virtual resources could be performedaccording to non-virtualized storage policies or preferences, accordingto storage policies or preferences directed specifically to virtualresources, and/or to combinations of non-virtualized and virtualizedstorage policies and preferences. As another example, a virtual machine110 may be coupled to a virtual tape library (VTL). The data agent 155may perform additional analysis on the nature and structure of thevirtual resource which underlies the VTL (e.g., a virtual disk 140).This may allow the data agent 155 to realize additional optimizationsrelating to storage operations associated with the data of the VTL. Forexample, even though the virtual resource is a VTL (necessitatingsequential access), storage operations might be able to be performednon-linearly or in a random access fashion since the underlying virtualresource allows random access. Therefore, rather than sequentiallyseeking through the VTL data to arrive at a particular point, the dataagent 155 could simply go directly to the relevant data on the virtualdisk 140 that is the subject of the storage operation.

Indexing Virtual Machine Data

In traditional copy or backup of virtual machines 110, an indexing agentis typically located at each virtual machine 110 or is otherwiseassociated with each virtual machine 110. The indexing agent indexesdata on the virtual machine 110. This results in the creation of oneindex per virtual machine 110. This facilitates searching of data on aper virtual machine 110 basis, but may make it difficult to search dataacross multiple virtual machines 110. Moreover, the indexing isperformed on the virtual machine 110 and thus uses its resources, whichmay not be desirable.

In contrast, copying of data of virtual machines 110 using thetechniques described herein may use one indexing agent that isassociated with multiple virtual machines 110. The sole indexing agentthus indexes multiple virtual machines 110. This results in the creationof one index for the multiple virtual machines 110. The one indexingagent can subdivide or logically separate the single index into multiplesub-indexes for each virtual machine 110. This technique facilitatessearching of data using one index across multiple virtual machines 110and also allows searching on a per virtual machine 110 basis. The soleindexing agent may create the single index using secondary copies ofvirtual machine data so as not to impact the primary copies or utilizevirtual machine resources. The indexed data may be tagged by users. Moredetails as to indexing data are described in the previously-referencedU.S. patent application Ser. No. 11/694,869.

Classification of Virtual Machine Data

As shown in FIG. 10, clients 1030 and secondary storage computingdevices 1065 may each have associated metabases (1070 and 1061,respectively). Each virtual machine 110 may also have its own metabasecontaining metadata about virtual machine data. Alternatively, one ormore virtual machines 110 may be associated with one or more metabases.A classification agent may analyze virtual machines 110 to identify dataobjects or other files, email, or other information currently stored orpresent by the virtual machines 110 and obtain certain informationregarding the information, such as any available metadata. Such metadatamay include information about data objects or characteristics associatedwith data objects, such as data owner (e.g., the client or user thatgenerates the data or other data manager), last modified time (e.g., thetime of the most recent modification), data size (e.g., number of bytesof data), information about the data content (e.g., the application thatgenerated the data, the user that generated the data, etc.), to/frominformation for email (e.g., an email sender, recipient, or individualor group on an email distribution list), creation date (e.g., the dateon which the data object was created), file type (e.g., the format orapplication type), last accessed time (e.g., the time the data objectwas most recently accessed or viewed), application type (e.g., theapplication that generated the data object), location/network (e.g., acurrent, past, or future location of the data object and networkpathways to/from the data object), frequency of change (e.g., a periodin which the data object is modified), business unit (e.g., a group ordepartment that generates, manages, or is otherwise associated with thedata object), and aging information (e.g., a schedule, which may includea time period, in which the data object is migrated to secondary orlong-term storage), etc. The information obtained in this analyzingprocess may be used to initially create or populate the metabases.

Alternatively or additionally, a journaling agent may populate themetabase with content by accessing virtual machines 110, or by directlyaccessing virtual resources (e.g., virtual disks 140). The journalingagent may include a virtual filter driver program and may be deployed ona virtual input/output port or data stack and operate in conjunctionwith a virtual file management program to record a virtual machine'sinteractions with its virtual data. This may involve creating a datastructure such as a record or journal of each interaction. The recordsmay be stored in a journal data structure and may chronicle datainteractions on an interaction-by-interaction basis. The journal mayinclude information regarding the type of interaction that has occurredalong with certain relevant properties of the data involved in theinteraction. The classification agent may analyze and process entrieswithin respective journals associated with journaling agents, and reportresults to the metabase. More details as to techniques used in theclassification of data and journaling of changes to data may be found inthe previously-referenced U.S. patent application Ser. No. 11/564,119.

Searching Virtual Machine Data

Once virtual machine data has been indexed and/or classified, users cansearch for virtual machine data using techniques known to those of skillin the art. The system may provide a single interface directed toenabling the search for virtual machine data (as well as non-virtualmachine data). A user can utilize the interface to provide a query whichis used to search metabases and/or indices of virtual machine data (aswell as non-virtual machine data). The system can in return provideresults from the metabases and/or indices relevant to the query that maybe segregated based upon their origin (e.g., based upon whether theycame from virtual machines or non-virtual machines). The returnedresults may be optionally analyzed for relevance, arranged, and placedin a format suitable for subsequent use (e.g., with anotherapplication), or suitable for viewing by a user and reported. Moredetails as to techniques for searching data and providing results may befound in commonly-assigned U.S. patent application Ser. No. 11/931,034(entitled METHOD AND SYSTEM FOR SEARCHING STORED DATA), the entirety ofwhich is incorporated by reference herein.

Single or Variable Instancing Virtual Machine Data

Virtual machine data may be single or variable instanced orde-duplicated in order to reduce the number of instances of stored data,sometimes to as few as one. For example, a virtual machine host 105 mayhost numerous virtual machines 110 configured identically or with slightvariations (e.g., the virtual machines have the same operating systemfiles, but different application data files). As another example, avirtual machine 110 may store substantially the same data in a virtualdisk 140 that a non-virtual machine stores on its storage devices (e.g.,both a virtual machine 110 and a non-virtual machine may have aC:\Windows directory and corresponding system files, and only oneinstance of each system file may need to be stored). If only a singleinstance of each data object in this data (the data of both the virtualmachines and the non-virtual machines) can be stored on a singleinstance storage device, significant savings in storage space may berealized.

To single or variable instance virtual machine data, an agent (e.g., amedia agent) may generate a substantially unique identifier (forexample, a hash value, message digest, checksum, digital fingerprint,digital signature or other sequence of bytes that substantially uniquelyidentifies the file or data object) for each virtual data object. Theword “substantially” is used to modify the term “unique identifier”because algorithms used to produce hash values may result in collisions,where two different files or data objects result in the same hash value.However, depending upon the algorithm or cryptographic hash functionused, collisions should be suitably rare and thus the identifiergenerated for a virtual file or data object should be unique throughoutthe system.

After generating the substantially unique identifier for the virtualdata object, the agent determines whether it should be stored on thesingle instance storage device. To determine this, the agent accesses asingle instance database to determine if a copy or instance of the dataobject has already been stored on the single instance storage device.The single instance database utilizes one or more tables or other datastructures to store the substantially unique identifiers of the dataobjects that have already been stored on the single instance storagedevice. If a copy or instance of the data object has not already beenstored on single instance storage device, the agent sends the copy ofthe virtual data object to the single instance storage device forstorage and adds its substantially unique identifier to the singleinstance database. If a copy or instance of the data object has alreadybeen stored, the agent can avoid sending another copy to the singleinstance storage device. In this case, the agent may add a reference(e.g., to an index in the single instance database, such as byincrementing a reference count in the index) to the already storedinstance of the data object. Adding a reference to the already storedinstance of the data object enables storing only a single instance ofthe data object while still keeping track of other instances of the dataobject that do not need to be stored.

Redundant instances of data objects may be detected and reduced atseveral locations or times throughout the operation of the system. Forexample, the agent may single or variable instance virtual machine dataprior to performing any other storage operations. Alternatively oradditionally, the agent may single instance virtual machine data afterit has been copied to the secondary storage data store 175. The agentmay generate a substantially unique identifier and send it across thenetwork 180 to the single instance database to determine if thecorresponding virtual data object should be stored, or the agent maysend the virtual data object to the single instance database, which thenmay generate a substantially unique identifier for it. More details asto single instancing data may be found in one or more of thepreviously-referenced described in one or more of previously-referencedU.S. patent application Ser. Nos. 11/269,512, 12/145,347, 12/145,342,11/963,623, 11/950,376, 61/100,686, and 61/164,803.

Protecting Virtual Machine Data in Homogenous and HeterogeneousEnvironments

The techniques described herein are applicable in both homogenous andheterogeneous environments. For example, the techniques described hereincan be used to copy and restore data from and to virtual machines 110operating solely on VMware virtual machine hosts (e.g., VMware ESXservers) or on solely Microsoft virtual machine hosts (e.g., on aMicrosoft Virtual Server or a Microsoft Windows Server Hyper-V). Asanother example, the techniques described herein can be used to copy andrestore data from and to virtual machines 110 that are operating in amixed-vendor environment (e.g., virtual machines from VMware, Microsoft,and/or other vendors). The data agent 155 can perform file-level,volume-level, and/or disk-level copies of virtual machines 110 operatingon these Microsoft platforms, and perform restores out of file-level,volume-level and disk-level copies.

For example, virtual machines 110 operating on these Microsoft platformshave their virtual disks 140 in *.vhd files. In performing a disk-levelcopy of a virtual machine 110 operating on a Microsoft platform, thedata agent 155 copies the *.vhd files, extracts metadata (e.g., file,volume, disk relationships metadata) from the *.vhd files and storesthis metadata. In restoring out of a disk-level copy, the data agent 155uses the stored metadata to reconstruct the virtual disks 140, volumesand files to allow the data agent 155 to restore files, volumes orentire virtual machines 110. The techniques described herein can also beused to copy and restore data from and to virtual machines 110 operatingon virtual machine hosts 105 from other vendors.

Conversion Between Differing Virtual Machine Formats

In the context of a VMware virtual machine 110, in restoring a volume ofa virtual machine 110 (e.g., step 930 of the process 900), the secondarystorage computing device 1065 restores the volume as a VMware volume,e.g., to a virtual machine 110 operating on a virtual machine host 105.However, the secondary storage computing device 1065 can also restorethe volume as a Microsoft volume, e.g., to a virtual machine 110operating on Microsoft Virtual Server or Microsoft Windows ServerHyper-V. The secondary storage computing device 1065 can thus convertdata in the VMware *.vmdk format to data in the Microsoft *.vhd format.This conversion process can also be performed in the opposite direction,e.g., from the Microsoft *.vhd format to the VMware *.vmdk format.

Similarly, in restoring an entire virtual machine 110 (e.g., step 965 ofthe process 900), the secondary storage computing device 1065 canrestore the entire virtual machine 110 as a virtual machine 110operating on a Microsoft platform. The secondary storage computingdevice 1065 does so by converting the data in the *.vmdk format to datain the *.vhd format (and associated configuration files). The secondarystorage computing device 1065 can thus convert a virtual machine 110operating on an ESX Server to a virtual machine 110 operating onMicrosoft Virtual Server or Microsoft Windows Server Hyper-V. Thisconversion process can also be performed in the opposite direction,e.g., from the Microsoft *.vhd format to the VMware *.vmdk format. Theconversion process enables virtual machine data originating on VMwareplatforms to be migrated to other platforms, and for virtual machinedata originating on non-VMware platforms to be migrated to the VMwareplatform. Similar conversions can also be performed for virtual disks140.

To perform the conversion, the secondary storage computing device 1065may use APIs or other programmatic techniques. For example, to convert a*.vhd file to a *.vmdk file, the secondary storage computing device 1065may create the *.vmdk file, create necessary data structures (e.g.,grain directories and grain tables) within the *.vmdk file, and copysectors of the volume of the *.vhd file to the *.vmdk file, going extentby extent and creating necessary entries in the data structures (e.g.,entries in the grain directories and grain tables) along the way. Thesecondary storage computing device 1065 may perform a similar process toconvert a *.vmdk file to a *.vhd file. As another example, the secondarystorage computing device 1065 may analyze a *.vmdk file using an APIfunction, determine its sectors using another API function, copy eachsector of to a *.vhd file using a third API function. As anotherexample, the secondary storage computing device 1065 may analyze a *.vhdfile using an API function, determine its sectors using another APIfunction, and copy each sector of to a*.vmdk file using a third APIfunction. The secondary storage computing device 1065 may use othertechniques (e.g., third-party toolkits) to perform conversions between*.vmdk and *.vhd formats.

Conversion between other formats is also possible. For example, thesecondary storage computing device 1065 can convert data between theVMware format and an Open Virtual Machine Format (OVF) and vice-versa.Those of skill in the art will understand that a wide variety ofconversions are possible, and the techniques are not limited to theconversions described herein.

Secondary Storage Computing Device Index

As described herein, a secondary storage computing device may maintainan index, a database, or other data structure that it uses to storeindex data generated during storage operations. The secondary storagecomputing device may use this index data to quickly and efficientlylocate data that has been previously copied. This index data may be usedfor various purposes, such as for browsing by an administrator and/orfor restoring the previously copied data.

During a storage operation involving multiple virtual machines 110, thesecondary storage computing device populates one index with metadatacorresponding to all the multiple virtual machines 110 (e.g., a masterindex). For each of the virtual machines 110, the secondary storagecomputing device also populates an index with metadata corresponding tothat virtual machine 110 (e.g., a sub-index). The master index points to(or refers to) the sub-indices. When an operation to restore virtualmachine data is to be performed, the master index is accessed. Becausethe master index points to the sub-indices, these can be accessed, andthe indexed data is used so as to present the virtual machine data thatis available to be restored. This available virtual machine data isdisplayed to an administrator segregated by individual virtual machines110, which is a logical distinction that is likely intuitive to theadministrator. Accordingly, accessing individual virtual machine indexdata involves two levels of indirection, one for the master index, andone for the sub-indices.

Additionally or alternatively, the secondary storage computing devicecan populate a single index that is subdivided or otherwise logicallyseparated into multiple sub-indexes, one sub-index for each virtualmachine 110. When an operation to restore virtual machine data is to beperformed, the index data populated by the secondary storage computingdevice can be used to present the virtual machine data segregated byindividual virtual machines 110. Other logical separations and/orsegregations of virtual machine data (e.g., by file type, by owner,etc.) are of course possible.

Automatic Throttling of Storage Operations

As described herein, a virtual machine host 105 may host multiplevirtual machines 110. If a data agent 155 is to perform simultaneousstorage operations on a large number of the virtual machines 110, theirperformance, individually or collectively, may be adversely affected.This potential adverse effect may be attributable to one or morereasons, such as, for example, the snapshotting of virtual machines 110prior to copying their data (see FIG. 7). There may not necessarily be alinear relationship between the number of storage operations that thedata agent 155 performs (or the number of virtual machines 110 uponwhich the data agent 155 is performing storage operations) and thereduction in performance. For example, performance may decrease linearlywith regards to a first number of concurrent storage operations (e.g.,ten concurrent storage operations), and then may drastically decreaseafter surpassing that first number.

Accordingly, it would be beneficial to be able to limit the number ofconcurrent storage operations being performed upon the virtual machines110 hosted by a virtual machine host 105. This could be done in one ofseveral ways. First, there could be a hard limit, or threshold, on thenumber of simultaneous storage operations performed. For example, thedata agent 155 could be limited to performing ten simultaneous storageoperations (e.g., upon ten different virtual machines 110). The dataagent 155 could distribute the ten simultaneous storage operationsacross the sub-clients corresponding to the virtual machines 110. Forexample, if a single virtual machine host 105 hosts 50 virtual machines110 distributed across five sub-clients, the data agent 155 could belimited to performing two simultaneous storage operations (e.g., upontwo virtual machines 110) per sub-client.

Second, the number of concurrent storage operations could be limitedbased upon the performance of one or more individual virtual machines110 and/or the performance of the virtual machine host 105. The dataagent 155 can measure performance using standard metrics (e.g., numberof disk writes and/or reads per second, central processing unit (CPU)usage, memory usage, etc.). If the data agent 155 determines that theperformances of the virtual machines 110 are below a certain performancethreshold, the data agent 155 could reduce the number of simultaneousstorage operations that it performs. Alternatively, if the data agent155 determines that the performances of the virtual machines 110 exceedthe certain performance threshold, the data agent 155 could increase thenumber of simultaneous storage operations that it performs.

Third, the throughput of concurrent storage operations could be reducedso as to utilize less of the resources (e.g., CPU, disk, memory, networkbandwidth, etc.) of the virtual machines 110 and/or the virtual machinehost 105. This reduction in throughput may lessen the loads placed uponthe virtual machines 110 and/or the virtual machine host 105 by thesimultaneous storage operations. However, this may also necessitatelengthening the window of time in which the storage operations areperformed. In each of these three approaches, if the data agent 155 isunable to perform a storage operation upon a virtual machine 110, thedata agent 155 may flag the virtual machine 110 for later performance ofa storage operation and move to the next virtual machine 110. Thesethree approaches are not mutually exclusive, and combinations of two ormore of the three may be used so as to optimally perform storageoperations upon virtual machines 110.

Additional Interfaces for Configuring Storage Operations for VirtualMachine Data

FIG. 11 is a display diagram illustrating an example interface 1100provided by aspects of the invention. The interface 1100 enables anadministrator to browse copied virtual machine data for purposes ofrestoring it. The administrator can specify that the latest data is tobe browsed or specify a point in time before which the data is to bebrowsed using options 1105. The administrator can also select a virtualmachine storage manager 145 using list box 1110 and a secondary storagecomputing device 1065 using list box 1115. The administrator can alsoselect the intended type of restore using options 1120: eitherrestoration of individual files and/or folders, restoration of entirevolumes, or restoration of virtual machines and/or virtual disks.

FIG. 12 is a display diagram illustrating example interfaces 1200 and1250 provided by aspects of the invention. The interface 1200 may beshown after the administrator has selected to browse the latest data(e.g., reference character 1105 of FIG. 11) and the selected intendedrestoration is that of individual files and/or folders (e.g., referencecharacter 1120 of FIG. 11). The interface 1200 includes a folderstructure 1205 corresponding to the copied virtual machine data. Asshown, a folder 1208 within a volume (Volume 1) of a virtual machine(TESTVM111) is selected. The interface 1250 provides the administratorwith options for restoring the selected folder. These include an option1210 to restore ACLS associated with the virtual machine data and anoption 1215 to unconditionally overwrite data. The administrator canspecify the destination computer and folder in region 1220. Theadministrator can also specify options for preserving or removing sourcepaths in region 1225.

FIGS. 13A and 13B are display diagrams illustrating example interfaces1300 and 1340 provided by aspects of the invention. The interface 1300may be shown after the administrator has selected the intendedrestoration to be that of an entire volume (e.g., reference character1120 of FIG. 11). The interface 1300 allows the administrator to selectto restore a volume as a physical volume, as a *.vhd file (correspondingto Microsoft virtual machines), or as a *.vmdk file (corresponding toVMware virtual machines) using options 1305. The administrator can alsoselect a destination computer in list box 1310, a source volume to berestored in region 1315, and a destination volume using button 1320.Selecting the button 1320 causes the interface 1340 to be displayed,which allows the administrator to select a mount point on the selecteddestination computer from available mount points listed in region 1325.

FIG. 13B illustrates the interface 1300 when the administrator hasselected to restore a volume as a *.vhd file from the options 1305. Theadministrator can select a destination computer in list box 1310 and adestination folder for the *.vhd file can be selected using button 1335.Once selected, the destination folder will be displayed in text box1330.

FIGS. 14A and 14B are display diagrams illustrating an example interface1400 provided by aspects of the invention. The interface 1400 may beshown after the administrator has selected the intended restoration tobe that of virtual machines or virtual disks (e.g., reference character1120 of FIG. 11). The interface 1400 allows the administrator to selectto restore either a virtual machine or virtual disks. As with theinterface 1300, the administrator can select a destination computer inlist box 1410 and a destination folder using button 1435. Once selected,the destination folder will be displayed in text box 1430. If restore ofvirtual machines is selected (FIG. 14A), the administrator can providethe name of the virtual machine to be restored in text box 1415, and thename of the server to which it is to be restored in text box 1420. Ifthe virtual machine is to be restored to a virtual machine host 105, theadministrator selects this option 1425 and specifies the name of thevirtual machine host 105 in text box 1420. If the virtual machine is tobe restored to a virtual machine host managed by a virtual machinemanager 202, the administrator selects this option 1425 and provides thename of the virtual machine manager 202 in text box 1420 and the name ofthe virtual machine host 105 in text box 1440. The administrator alsospecifies authentication credentials in region 1445.

FIG. 15 is a display diagram illustrating an example interface 1500provided by aspects of the invention. The interface 1500 allows theadministrator to specify options for storage operations for asub-client. Region 1505 displays information associated with thesub-client. The administrator can specify the number of data readers touse in performing storage operations using spinner 1510. The specifiednumber of data readers corresponds to the number of storage operationsto be simultaneous performed on the virtual machines 110 associated withthe sub-client. As described herein, the number of simultaneous storageoperations may be limited or capped so as not to adversely affectperformance of the virtual machines 110.

The administrator can also specify the type of copy operation to beperformed using options 1515: either file level, volume level, or disklevel. The administrator can also select one or more virtual machinestorage managers 145 that are to perform the copy operations using listbox 1520. Generally, the administrator has to select at least onevirtual machine storage manager 145 to perform the copy operation.

If the administrator selects two or more virtual machine storagemanagers 145 in the list box 1520, this causes the copy operation, whenit commences, to be performed by the selected virtual machine storagemanagers 145. This can assist in load balancing and provide otherbenefits. For example, one or more sub-clients could be configured toperform copy operations upon all the virtual machines 110 associatedwith a specific virtual machine manager 202. This could be a largenumber of virtual machines 110, and if only one virtual machine storagemanager 145 were to perform copy operations upon the one or moresub-clients' virtual machines 110, it could take a lengthy period oftime to conclude all the copy operations. Accordingly, distributing copyoperations across multiple virtual machine storage managers 145 canshorten the amount of time it takes to conclude all the copy operations.This can be true even in the case of a single virtual machine 110 (forexample, when the single virtual machine 110 contains a large amount ofdata). This workload balancing can provide significant benefits, such aswhen copy operations need to be performed entirely within a specificwindow of time (e.g., from 2:00 a.m. to 4:00 a.m.). Moreover, such loadbalancing only requires a single virtual machine storage manager 145 tocoordinate the performance of the copy operations by the multiplevirtual machine storage managers 145.

For example, an administrator could select a first virtual machinestorage manager 145 that coordinates the copying of data of multiplevirtual machines 110. The administrator could also select one or moresecond virtual machine storage managers 145 to perform the copying ofdata of multiple virtual machines 110. The first data agent 155 canallocate responsibility for the copying of the data amongst the secondvirtual machine storage managers 145 such that the copying is more orless evenly distributed based upon selections previously made (staticload-balancing).

Additionally or alternatively, the first virtual machine storage manager145 can distribute the copy operations across the second virtual machinestorage managers 145 based upon various factors. Consider an examplewhere ten copy operations of the data of ten virtual machines 110 are tobe performed, and where two second virtual machine storage managers 145can be used to perform the copy operations. The first virtual machinestorage manager 145 can determine an availability of the second virtualmachine storage managers 145, as measured by percentage of CPU usage,percentage of network utilization, disk utilization, average time spentperforming storage operations, and/or other factors. For example, if thefirst virtual machine storage manager 145 determines that one of thesecond virtual machine storage managers 145 have a percentage of CPUusage of 10%, and that the other second virtual machine storage manager145 has a percentage of CPU usage of 50%, the storage manager 1005 mayallocate eight of the copy operations to the one second virtual machinestorage manager 145 and the remaining two copy operations to the othersecond virtual machine storage manager 145, based upon this measurementof availability (dynamic load-balancing). The first virtual machinestorage manager 145 may also use other factors known to those of skillin the art to balance the workloads of the two virtual machine storagemanagers 145. Additionally or alternatively, the storage manager 1005may perform the load-balancing amongst the multiple virtual machinestorage managers 145.

Copying of Virtual Machine Data on an Incremental Basis

As described herein, the primary storage data store 135 stores the dataof virtual machines 110. The data is organized into multiple blocks offixed size (e.g., 64 kb, 128 kb, 256 kb, 512 kb, etc.). A data agent 155can perform full copies of data of virtual machines 110 using the blocksof data. In some instances, it may not be necessary to perform a secondfull backup of virtual machine data after a first full backup has beenperformed (at least not until a set period of time has elapsed). Rather,incremental and/or differential backups of virtual machine data maysuffice.

FIG. 16 is a flow diagram illustrating a process 1600 for copyingvirtual machine data on an incremental basis (or a differential basis,but incremental copies are described herein for brevity). The process1600 may be performed by the data agent 155. The data agent 155 beginsat step 1605 by accessing data structures within virtual disk files 140.As described herein, virtual disks 140 can be growable or preallocated.In either case, virtual disks 140 may use internal data structures tospecify the blocks that have been allocated and/or are being used by thevirtual machines 110. For example, VMware virtual machine disk files(*.vmdk files) include grain directories and grain tables, and Microsoftvirtual disk files (*.vhd files) include block allocation tables. Theseinternal data structures specify the blocks within virtual disks 140that have been allocated and/or are being used for data storage.

At step 1610, the data agent 155 determines the blocks that have beenallocated and/or are being used within the virtual disks 140. At step1615 the data agent 155 accesses a block identifier data structure tomake the determination of which blocks have changed since the laststorage operation involving a full copy of the virtual machine data.

FIG. 17 is a diagram illustrating an example table 1700 that may beemployed as a block identifier data structure. The data agent 155 maycreate the table 1700 during, for example, a storage operation thatperforms a full copy of all of the data of the virtual machine 110. Thetable 1700 includes a block identifier column 1702 and a substantiallyunique identifier column 1704. The block identifier column 1702 storesidentifiers of blocks within a virtual disk 140. Block may be identifiedby their order within a virtual disk 140. For example, a first block mayhave an identifier of one (“1”), a second block may have an identifierof two (“2”), and so forth. The substantially unique identifier column1704 stores identifiers generated for the block by the data agent 155.For example, substantially unique identifiers could be generated usingMessage Digest Algorithm 5 (MD5) or Secure Hash Algorithm SHA 512.Although the table 1700 is illustrated as including three rows 1706 ofthree different blocks, the table 1700 generally includes one row foreach block in a virtual disk 140.

Returning to FIG. 16, at step 1620, for each block that the data agent155 determines has been allocated and/or is in use, the data agent 155generates a substantially unique identifier. At step 1625, the dataagent 155 finds the row in the table 1700 for which the block identifierof column 1702 is the same as the block identifier of the blockcurrently being processed. The data agent 155 then looks up thesubstantially unique identifier in the column 1704, and compares it tothe generated substantially unique identifier. If the two substantiallyunique identifiers do not match, then the block currently beingprocessed has changed. The process 1600 then continues at step 1630where the data agent 155 copies the block to a storage device. The dataagent 155 then updates the column 1704 of the table 1700 with thegenerated substantially unique identifier. At step 1640, the data agent155 determines whether there are more blocks to process. If so, theprocess 1600 returns to step 1620. If not, the process 1600 concludes.If the block has not changed (step 1625), the process 1600 continues atstep 1640. The next time the data agent 155 performs a full copy of allof the data of the virtual machine 110, the data agent 155 canregenerate substantially unique identifiers for blocks of data andrepopulate or recreate the table 1700.

If, at step 1625, the data agent 155 cannot find a row in the table 1700for which the block identifier of column 1702 is the same as the blockidentifier of the block currently being processed, this generallyindicates that the data agent 155 is currently processing a block thathas been allocated and/or has been put to use since the time at whichthe last full copy operation was performed. If this is the case, thedata agent 155 will copy the block to the storage device, and at step1635 the data agent will add a row to the table 1700 with the blockidentifier and the generated substantially unique identifier.

The process 1600 and the table 1700 thus enable copying of virtualmachine data on an incremental basis. This can provide significantadvantages in that it allows for only copying the data that has changedwhile still providing for protection of virtual machine data. Changescan be made to the process 1600 and/or the table 1700 while stillretaining the ability to perform storage operations on an incrementalbasis. For example, a monitoring agent could monitor the blocks of thevirtual disks 140 and, each time a block is changed (e.g., due to awrite operation), the monitoring agent could set a flag (or bit) for theblock in a data structure. When the data agent 155 is to perform anincremental copy, it can access the data structure containing the flagsand only copy blocks that have been flagged. As another example, thetable 1700 could include a time copied column to store timestamps ofwhen a block was last copied to a storage device. If the differencebetween the time of the incremental copy operation and the last timecopied is greater than a threshold time, the data agent 155 could copythe block to the storage device, regardless of whether the generatedsubstantially unique identifier matches the stored substantially uniqueidentifier.

CONCLUSION

From the foregoing, it will be appreciated that specific embodiments ofthe storage system have been described herein for purposes ofillustration, but that various modifications may be made withoutdeviating from the spirit and scope of the invention. For example,although copy operations have been described, the system may be used toperform many types of storage operations (e.g., backup operations,restore operations, archival operations, copy operations, CDRoperations, recovery operations, migration operations, HSM operations,etc.). Accordingly, the invention is not limited except as by theappended claims.

Unless the context clearly requires otherwise, throughout thedescription and the claims, the words “comprise,” “comprising,” and thelike are to be construed in an inclusive sense, as opposed to anexclusive or exhaustive sense; that is to say, in the sense of“including, but not limited to.” The word “coupled,” as generally usedherein, refers to two or more elements that may be either directlyconnected, or connected by way of one or more intermediate elements.Additionally, the words “herein,” “above,” “below,” and words of similarimport, when used in this application, shall refer to this applicationas a whole and not to any particular portions of this application. Wherethe context permits, words in the above Detailed Description using thesingular or plural number may also include the plural or singular numberrespectively. The word “or” in reference to a list of two or more items,that word covers all of the following interpretations of the word: anyof the items in the list, all of the items in the list, and anycombination of the items in the list.

The above detailed description of embodiments of the invention is notintended to be exhaustive or to limit the invention to the precise formdisclosed above. While specific embodiments of, and examples for, theinvention are described above for illustrative purposes, variousequivalent modifications are possible within the scope of the invention,as those skilled in the relevant art will recognize. For example, whileprocesses or blocks are presented in a given order, alternativeembodiments may perform routines having steps, or employ systems havingblocks, in a different order, and some processes or blocks may bedeleted, moved, added, subdivided, combined, and/or modified. Each ofthese processes or blocks may be implemented in a variety of differentways. Also, while processes or blocks are at times shown as beingperformed in series, these processes or blocks may instead be performedin parallel, or may be performed at different times.

The teachings of the invention provided herein can be applied to othersystems, not necessarily the system described above. The elements andacts of the various embodiments described above can be combined toprovide further embodiments.

These and other changes can be made to the invention in light of theabove Detailed Description. While the above description details certainembodiments of the invention and describes the best mode contemplated,no matter how detailed the above appears in text, the invention can bepracticed in many ways. Details of the system may vary considerably inimplementation details, while still being encompassed by the inventiondisclosed herein. As noted above, particular terminology used whendescribing certain features or aspects of the invention should not betaken to imply that the terminology is being redefined herein to berestricted to any specific characteristics, features, or aspects of theinvention with which that terminology is associated. In general, theterms used in the following claims should not be construed to limit theinvention to the specific embodiments disclosed in the specification,unless the above Detailed Description section explicitly defines suchterms. Accordingly, the actual scope of the invention encompasses notonly the disclosed embodiments, but also all equivalent ways ofpracticing or implementing the invention under the claims.

While certain aspects of the invention are presented below in certainclaim forms, the inventors contemplate the various aspects of theinvention in any number of claim forms. For example, while only oneaspect of the invention is recited as embodied in a computer-readablemedium, other aspects may likewise be embodied in a computer-readablemedium. As another example, while only one aspect of the invention isrecited as a means-plus-function claim under 35 U.S.C. §112, sixthparagraph, other aspects may likewise be embodied as ameans-plus-function claim, or in other forms, such as being embodied ina computer-readable medium. (Any claims intended to be treated under 35U.S.C. §112, ¶ 6 will begin with the words “means for.”) Accordingly,the inventors reserve the right to add additional claims after filingthe application to pursue such additional claim forms for other aspectsof the invention.

We claim:
 1. A method of managing data of one or more virtual machineshosted by a virtual machine host, wherein the method is performed by oneor more computing systems, each computing system having a processor andmemory, the method comprising: receiving a request to copy data of atleast one virtual machine to a storage device, wherein the at least onevirtual machine stores data in at least one virtual machine disk fileresiding on a filesystem of the virtual machine host; determining the atleast one virtual machine disk file in which the at least one virtualmachine stores data; copying the at least one virtual machine disk filefrom the filesystem of the virtual machine host to the storage device;extracting, by the one or more computing systems, information from theat least one virtual machine disk file, wherein extracting informationincludes extracting at least one of the following: information thatdescribes a virtual volume utilized by the at least one virtual machine;information that describes a location of a virtual file allocation tableutilized by the at least one virtual machine, wherein the virtual fileallocation table provides for locations of virtual files within thevirtual volume; and information that describes a relationship betweenthe at least one virtual machine disk file and another virtual machinedisk file in which the at least one virtual machine stores data;associating the extracted information with the at least one virtualmachine; and storing the extracted information in association with theat least one virtual machine.
 2. The method of claim 1, furthercomprising: receiving a request to copy a virtual file contained withinthe virtual machine disk file stored on the storage device to arequested location; accessing the at least one virtual machine disk filestored on the storage device; accessing the stored extractedinformation; determining, based on the stored extracted information, thelocation of the virtual file within the at least one virtual machinedisk file; extracting the virtual file from within the at least onevirtual machine disk file; and copying the virtual file to the requestedlocation.
 3. The method of claim 1, further comprising: receiving arequest to copy a virtual volume contained within the virtual machinedisk file stored on the storage device to a requested location;accessing the at least one virtual machine disk file stored on thestorage device; accessing the stored extracted information; determining,based on the stored extracted information, the location of the virtualvolume within the at least one virtual machine disk file; extracting thevirtual volume from within the at least one virtual machine disk file;and copying the virtual volume to the requested location.
 4. The methodof claim 1, further comprising: receiving a request to copy the at leastone virtual machine disk file stored on the storage device to arequested location; accessing the at least one virtual machine disk filestored on the storage device; and copying the at least one virtualmachine disk file to the requested location.
 5. The method of claim 1,wherein the virtual machine disk file is in a first format, and furthercomprising: receiving a request to convert the at least one virtualmachine disk file to a second format; accessing the at least one virtualmachine disk file stored on the storage device; and converting the atleast one virtual machine disk file to the second format.
 6. The methodof claim 1, further comprising: determining distinct data objects withinthe at least one virtual machine disk file based at least in part uponthe extracted information; indexing distinct data objects within the atleast one virtual machine disk file; and storing the indexed distinctdata objects in an index, wherein the index also includes dataassociated with at least one non-virtual machine.
 7. The method of claim1, further comprising: determining distinct data objects within the atleast one virtual machine disk file based at least in part upon theextracted information; indexing distinct data objects within the atleast one virtual machine disk file; storing the indexed distinct dataobjects in an index, wherein the index also includes data associatedwith at least one non-virtual machine: receiving a request to query theindex; and returning search results responsive to the request, whereinthe search results include search results associated with distinct dataobjects of the least one virtual machine and with distinct data objectsat least one non-virtual machine.
 8. The method of claim 1, furthercomprising: determining distinct data objects within the at least onevirtual machine disk file based at least in part upon the extractedinformation; and for each of the distinct data objects: generating asubstantially unique identifier for the distinct data object;determining, based on the substantially unique identifier, if aninstance of the distinct data object has already been stored on a singleinstance storage device; and if an instance of the distinct data objecthas not already been stored on the single instance storage device, thenstoring the data object on the single instance storage device.
 9. Acomputer-readable storage medium whose contents cause one or morecomputing systems to perform a method of managing data of one or morevirtual machines hosted by a virtual machine host, wherein each of theone or more computing systems has a processor and memory, the methodcomprising: receiving a request to copy data of a virtual machine to astorage device, wherein the virtual machine stores data in a virtualmachine disk file residing on a filesystem of the virtual machine host;determining the virtual machine disk file in which the virtual machinestores data; copying the virtual machine disk file from the filesystemof the virtual machine host to the storage device; extracting, by theone or more computing systems, information from the virtual machine diskfile, wherein extracting information includes extracting informationthat either describes locations of data objects within the virtualmachine disk file or describes a location of a data object locator datastructure within the virtual machine disk file; associating theextracted information with the virtual machine; and storing theextracted information in association with the virtual machine.
 10. Thecomputer-readable storage medium of claim 9, wherein the method furthercomprises: receiving a request to copy a data object contained withinthe virtual machine disk file stored on the storage device to arequested location; accessing the virtual machine disk file stored onthe storage device; accessing the stored extracted information;determining, based at least in part on the stored extracted information,the location of the data object within the virtual machine disk file;extracting the data object from within the virtual machine disk file;and copying the data object to the requested location.
 11. Thecomputer-readable storage medium of claim 9, wherein the method furthercomprises: determining, based at least in part upon the extractedinformation, data objects within the virtual machine disk file; indexingdata objects within the virtual machine disk file; and storing theindexed data objects in an index, wherein the index also includes dataassociated with at least one non-virtual machine.
 12. Thecomputer-readable storage medium of claim 9, wherein the method furthercomprises: determining data objects within the virtual machine disk filebased at least in part upon the extracted information; and for at leastone of the data objects: generating a substantially unique identifierfor the data object; determining, based on the substantially uniqueidentifier, if an instance of the data object has already been stored ona storage device; and if an instance of the data object has not alreadybeen stored on the storage device, then storing the data object on thestorage device.
 13. A computing system for managing data of one or morevirtual machines hosted by a virtual machine host, the computing systemcomprising: means for receiving a request to copy data of a virtualmachine, wherein the virtual machine stores data in a virtual machinedisk file residing on a filesystem of the virtual machine host; meansfor determining the virtual machine disk file in which the virtualmachine stores data; means for copying the virtual machine disk filefrom the filesystem of the virtual machine host to the storage device;means for extracting information from the virtual machine disk file,wherein extracting information includes extracting information thateither describes locations of data objects within the virtual machinedisk file or describes a location of a data object location datastructure within the virtual machine disk file; and means forassociating the extracted information with the virtual machine; andmeans for storing the extracted information in association with thevirtual machine.
 14. The computing system of claim 13, furthercomprising: means for determining, based at least in part upon theextracted information, data objects within the virtual machine diskfile; means for indexing data objects within the virtual machine diskfile; and means for storing the indexed data objects in an index,wherein the index also includes data associated with at least onenon-virtual machine.
 15. The computing system of claim 13, furthercomprising: means for determining data objects within the virtualmachine disk file based at least in part upon the extracted information;means for generating a substantially unique identifier for at least oneof the data objects; means for determining, based on the substantiallyunique identifier, if an instance of the at least one data object hasalready been stored; and means for storing the at least one data objectif an instance of the data object has not already been stored.
 16. Amethod of managing data of one or more virtual machines hosted by avirtual machine host, wherein the method is performed by one or morecomputing systems, each computing system having a processor and memory,the method comprising: receiving a first request to copy data of atleast one virtual machine to a first storage device, wherein the atleast one virtual machine stores data in at least one virtual machinedisk file residing on a filesystem of the virtual machine host;determining, by the one or more computing systems, the at least onevirtual machine disk file in which the at least one virtual machinestores data, wherein the at least one virtual machine disk file includesmultiple blocks of data; determining blocks within the at least onevirtual machine disk file that are used by the at least one virtualmachine; for at least some of the determined blocks, generatingsubstantially unique identifiers; storing the generated substantiallyunique identifiers in a data structure; copying at least some of theblocks of the at least one virtual machine disk file from the filesystemof the virtual machine host to the first storage device; receiving asecond request to copy data of the at least one virtual machine to asecond storage device; determining blocks within the at least onevirtual machine disk file that are used by the at least one virtualmachine; for at least one of the determined blocks: generating asubstantially unique identifier; determining from the data structure ifthe generated substantially unique identifier is equivalent to asubstantially unique identifier in the data structure; and when thegenerated substantially unique identifier is not equivalent to asubstantially unique identifier in the data structure, copying the blockto the second storage device.
 17. The method of claim 16, wherein thedata structure includes multiple items of data, and wherein the methodfurther comprises when the generated substantially unique identifier isnot equivalent to a substantially unique identifier in the datastructure, updating an existing item of data in the data structure toinclude the generated substantially unique identifier.
 18. The method ofclaim 16, wherein the data structure includes multiple items of data,and wherein the method further comprises when the generatedsubstantially unique identifier is not equivalent to a substantiallyunique identifier in the data structure, adding an existing item of datato the data structure that includes the generated substantially uniqueidentifier.
 19. The method of claim 16, further comprising when thegenerated substantially unique identifier is equivalent to asubstantially unique identifier in the data structure, avoiding copyingthe block to the second storage device.
 20. A computer-readable storagemedium whose contents cause one or more computing systems to perform amethod of managing data of one or more virtual machines hosted by avirtual machine host, wherein each computing system having a processorand memory, the method comprising: receiving a request to copy data ofat least one virtual machine to a storage device, wherein the at leastone virtual machine stores data in at least one virtual machine diskfile residing on a filesystem of the virtual machine host; determiningthe at least one virtual machine disk file in which the at least onevirtual machine stores data; copying the at least one virtual machinedisk file from the filesystem of the virtual machine host to the storagedevice; extracting, by the one or more computing systems, informationfrom the at least one virtual machine disk file, wherein extractinginformation includes extracting at least one of the following:information that describes a virtual volume utilized by the at least onevirtual machine; information that describes a location of a virtual fileallocation table utilized by the at least one virtual machine, whereinthe virtual file allocation table provides for locations of virtualfiles within the virtual volume; and information that describes arelationship between the at least one virtual machine disk file andanother virtual machine disk file in which the at least one virtualmachine stores data; associating the extracted information with the atleast one virtual machine; and storing the extracted information inassociation with the at least one virtual machine.
 21. Thecomputer-readable storage medium of claim 20, wherein the method furthercomprises: receiving a request to copy a virtual file contained withinthe virtual machine disk file stored on the storage device to arequested location; accessing the at least one virtual machine disk filestored on the storage device; accessing the stored extractedinformation; determining, based on the stored extracted information, thelocation of the virtual file within the at least one virtual machinedisk file; extracting the virtual file from within the at least onevirtual machine disk file; and copying the virtual file to the requestedlocation.